模块是一个有自己的模型,视图,控制器以及其它模块的实体。这实际上是在应用程序内的应用程序。
第1步- 在你的项目根目录内创建一个 modules 文件夹。在 modules 文件夹内创建一个名为 admin 的文件夹。这是 admin 模块的基本文件夹。
第2步 - 在 admin 文件夹里边,使用以下代码来创建 Admin.php 文件。
<?php
namespace app\modules\admin;
class Admin extends \yii\base\Module {
public function init() {
parent::init();
}
}
?>
我们刚刚创建了一个模块类。它位于模块根路径下。每一次模块被访问时,将创建对应的模块类的一个实例。init()函数用于初始化模块的属性。
第3步 - 现在,在 admin文件夹内添加两个目录- controllers 和 views。添加 CustomController.php 文件到控制器的文件夹中。
<?php
namespace app\modules\admin\controllers;
use yii\web\Controller;
class CustomController extends Controller {
public function actionGreet() {
return $this->render('greet');
}
}
?>
当创建一个模块,惯例是把控制器类到模块根路径的 controllers 目录。我们刚才定义的actionGreet函数,只返回一个 greet 视图。
在模块中视图应该放在模块基本路径的 views 文件夹中。如果视图是由控制器呈现,那么它们应位于对应于该控制器ID的文件夹中。将 custom 文件夹添加到 views 文件夹。
第4步 - 在 custom 目录里创建一个名为 greet.php 文件并使用下面的代码。
<h1>Hello,这是一个自定义模块!</h1>
我们刚刚创建了 actionGreet 视图。要在模块中使用这个新创建文件,我们还应该配置应用程序。我们应该将模块添加到应用程序的模块属性中。
第5步 - 修改 config/web.php 文件,如下。
<?php
$params = require(__DIR__ . '/params.php');
$config = [
'id' => 'basic',
'basePath' => dirname(__DIR__),
'bootstrap' => ['log'],
'components' => [
'request' => [
// !!! insert a secret key in the following (if it is empty) - this is
//required by cookie validation
'cookieValidationKey' => 'Yia-xuhuhu.com',
],
'cache' => [
'class' => 'yii\caching\FileCache',
],
'user' => [
'identityClass' => 'app\models\User',
'enableAutoLogin' => true,
],
'errorHandler' => [
'errorAction' => 'site/error',
],
'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
// send all mails to a file by default. You have to set
// 'useFileTransport' to false and configure a transport
// for the mailer to send real emails.
'useFileTransport' => true,
],
'log' => [
'traceLevel' => YII_DEBUG ? 3 : 0,
'targets' => [
[
'class' => 'yii\log\FileTarget',
'levels' => ['error', 'warning'],
],
],
],
'db' => require(__DIR__ . '/db.php'),
],
'modules' => [
'admin' => [
'class' => 'app\modules\admin\Admin',
],
],
'params' => $params,
];
if (YII_ENV_DEV) {
// configuration adjustments for 'dev' environment
$config['bootstrap'][] = 'debug';
$config['modules']['debug'] = [
'class' => 'yii\debug\Module',
];
$config['bootstrap'][] = 'gii';
$config['modules']['gii'] = [
'class' => 'yii\gii\Module',
];
}
return $config;
?>
模块的控制器路由必须使用模块ID开始,后面控制器ID和动作ID。
第6步 - 如要在应用程序运行 actionGreet,应该使用下面的路由
admin/custom/greet
在这里,admin 就是一个模块ID,custom 是控制器ID和 greet 就是一个动作ID。
要点
模块(Modules)应该 −
-
在大型应用程序中。应划分其功能分成几个应用组。每个应用功能组可以作为一个模块开发。
-
可重复使用。一些常用的功能,如搜索引擎优化管理或博客的管理,可以开发成模块,这样在今后的项目中很容易地重用它们。
上一篇:
Yii小部件(Widget)
下一篇:
Yii视图

