在 config/web.php
文件中,模块配置用于定义和配置应用中的模块。模块可以看作是小型的应用,有自己的控制器、模型和视图,可以独立于主应用运行。
1. 模块配置项
1.1 class
- 类型:
string
- 描述:模块的类名,通常是一个继承自
yii\base\Module
的类。 - 使用场景:指定模块的类,以便框架能够实例化该模块。
- 示例:
'admin' => ['class' => 'app\modules\admin\Module', ],
1.2 controllerNamespace
- 类型:
string
- 描述:模块的控制器命名空间,默认为
app\modules\<module_name>\controllers
。 - 使用场景:指定模块的控制器所在的命名空间。
- 示例:
'admin' => ['class' => 'app\modules\admin\Module','controllerNamespace' => 'app\modules\admin\controllers', ],
1.3 defaultRoute
- 类型:
string
- 描述:模块的默认路由,即模块启动时默认访问的控制器和动作。
- 使用场景:设置模块的默认路由。
- 示例:
'admin' => ['class' => 'app\modules\admin\Module','defaultRoute' => 'dashboard/index', ],
1.4 components
- 类型:
array
- 描述:模块中使用的组件配置。
- 使用场景:配置模块中使用的组件,如数据库连接、缓存、用户认证等。
- 示例:
'admin' => ['class' => 'app\modules\admin\Module','components' => ['db' => ['class' => 'yii\db\Connection','dsn' => 'mysql:host=localhost;dbname=admin_db','username' => 'admin_user','password' => 'admin_password','charset' => 'utf8',],], ],
1.5 modules
- 类型:
array
- 描述:模块中包含的子模块配置。
- 使用场景:在模块中定义子模块。
- 示例:
'admin' => ['class' => 'app\modules\admin\Module','modules' => ['user' => ['class' => 'app\modules\admin\modules\user\Module',],], ],
1.6 params
- 类型:
array
- 描述:模块的参数配置。
- 使用场景:配置模块的参数,可以在模块中通过
Yii::$app->params
访问。 - 示例:
'admin' => ['class' => 'app\modules\admin\Module','params' => ['adminEmail' => 'admin@example.com',], ],
1.7 as
- 类型:
array
- 描述:模块的行为配置。
- 使用场景:为模块添加行为(Behavior),扩展模块的功能。
- 示例:
'admin' => ['class' => 'app\modules\admin\Module','as access' => ['class' => 'yii\filters\AccessControl','rules' => [['allow' => true,'roles' => ['@'],],],], ],
2. 使用场景
2.1 定义模块
// config/web.php
'modules' => ['admin' => ['class' => 'app\modules\admin\Module',],
],
2.2 配置模块的控制器命名空间
// config/web.php
'modules' => ['admin' => ['class' => 'app\modules\admin\Module','controllerNamespace' => 'app\modules\admin\controllers',],
],
2.3 设置模块的默认路由
// config/web.php
'modules' => ['admin' => ['class' => 'app\modules\admin\Module','defaultRoute' => 'dashboard/index',],
],
2.4 配置模块的组件
// config/web.php
'modules' => ['admin' => ['class' => 'app\modules\admin\Module','components' => ['db' => ['class' => 'yii\db\Connection','dsn' => 'mysql:host=localhost;dbname=admin_db','username' => 'admin_user','password' => 'admin_password','charset' => 'utf8',],],],
],
2.5 配置模块的子模块
// config/web.php
'modules' => ['admin' => ['class' => 'app\modules\admin\Module','modules' => ['user' => ['class' => 'app\modules\admin\modules\user\Module',],],],
],
2.6 配置模块的参数
// config/web.php
'modules' => ['admin' => ['class' => 'app\modules\admin\Module','params' => ['adminEmail' => 'admin@example.com',],],
],
2.7 添加模块的行为
// config/web.php
'modules' => ['admin' => ['class' => 'app\modules\admin\Module','as access' => ['class' => 'yii\filters\AccessControl','rules' => [['allow' => true,'roles' => ['@'],],],],],
],
3. 底层原理
3.1 模块的生命周期
- 初始化:在应用启动时,框架会加载
config/web.php
文件中的模块配置,并实例化模块对象。 - 注册:模块对象被注册到应用对象中,可以通过
Yii::$app->getModule('moduleName')
访问。 - 使用:在路由解析时,如果匹配到模块的路由,框架会调用模块的控制器和动作。
- 销毁:在应用结束时,模块对象会被销毁,释放资源。
3.2 模块的配置
- 配置文件:模块的配置可以在
config/web.php
文件中定义,也可以在模块类的init
方法中动态配置。 - 组件配置:模块可以有自己的组件配置,这些组件可以在模块中使用,不会影响其他模块或主应用。
- 行为配置:模块可以添加行为,扩展模块的功能,如访问控制、日志记录等。
3.3 路由解析
- 路由规则:模块的路由规则可以在
config/web.php
文件中定义,也可以在模块类的init
方法中动态配置。 - 路由匹配:在路由解析时,框架会根据配置的路由规则匹配模块的路由,如果匹配成功,会调用模块的控制器和动作。
4. 示例
以下是一个完整的 config/web.php
文件示例,包含模块配置:
<?php
$params = array_merge(require __DIR__ . '/params.php',require __DIR__ . '/params-local.php'
);$config = ['id' => 'basic','basePath' => dirname(__DIR__),'bootstrap' => ['log'],'defaultRoute' => 'site/index','components' => ['db' => ['class' => 'yii\db\Connection','dsn' => 'mysql:host=localhost;dbname=test','username' => 'root','password' => '','charset' => 'utf8',],'cache' => ['class' => 'yii\caching\FileCache',],'user' => ['identityClass' => 'app\models\User','enableAutoLogin' => true,],'log' => ['traceLevel' => YII_DEBUG ? 3 : 0,'targets' => [['class' => 'yii\log\FileTarget','levels' => ['error', 'warning'],],],],'urlManager' => ['enablePrettyUrl' => true,'showScriptName' => false,'rules' => ['admin/<controller:\w+>/<action:\w+>' => 'admin/<controller>/<action>',],],],'modules' => ['admin' => ['class' => 'app\modules\admin\Module','controllerNamespace' => 'app\modules\admin\controllers','defaultRoute' => 'dashboard/index','components' => ['db' => ['class' => 'yii\db\Connection','dsn' => 'mysql:host=localhost;dbname=admin_db','username' => 'admin_user','password' => 'admin_password','charset' => 'utf8',],],'params' => ['adminEmail' => 'admin@example.com',],'as access' => ['class' => 'yii\filters\AccessControl','rules' => [['allow' => true,'roles' => ['@'],],],],],],'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;
5. 总结
config/web.php
文件中的模块配置用于定义和配置应用中的模块。通过合理配置模块,可以实现应用的模块化设计,提高代码的可维护性和可扩展性。