你可否知道?我们新建一个module后在web.php可以对其进行近20项配置?跟我看来~
不知道module?看下面代码
// web.php
......
'modules' => [
'partner' => [
'class' => 'app\modules\partner\Module',
],
],
......
class
这是一个必填项,在yii2中很多地方都是这样的格式,我们想生成一个partner的模块对象,首先要知道是哪个类的对象,class就是这个作用。
通过这个配置我们建立了appmodulespartnerModule的对象。
再比如在db.php中的class也是这个作用,在BaseYii.php的createObject方法中你可以看到具体实现。
layout
布局参数,选填。
当你不填写时候会使用yii2应用的布局文件,你可以制定一个,比如
......
'modules' => [
'partner' => [
'class' => 'app\modules\partner\Module',
'layout' => 'main'
],
],
......
yii2会去寻找模块视图中的layouts/main.php文件。
重点:layout值是一个路径,不是一个名称,看下面的解释。
/a/main 寻找@app/views/layouts/a/main.php
a/main 寻找 @app/modules/partner/views/layouts/a/main.php
明白了吧。另外layout可以为false,代表禁用布局。
params
我们可以为模块设置一些参数,数组形式。记住这个参数属于整个模块,你可以在Module类中使用$this->params获得它们。
当然你在模块的控制器中也可以通过$this->module->params获得。
比如下面代码
......
'modules' => [
'partner' => [
'class' => 'app\modules\partner\Module',
'params' => ['dev'=>'abei2017'],
],
],
......
填写这个模块的开发者,总之是属于这个模块的。
id
在逻辑结构上代表一个module,一般不用修改,它和我们模块的目录名不一定要相等,比如下面代码也没问题
......
'modules' => [
'abc' => [
'class' => 'app\modules\partner\Module',
'id'=>'partnerdd'
],
],
......
我们通过r=abc/default/index 仍然可以进行访问,此刻module的id=partnerdd
basePath
一般来说不用修改,它代表一个模块的物理路径,记住要和class一致,否则basePath不会起作用,看下面代码
......
'modules' => [
'partner' => [
'class' => 'app\modules\partner\Module',
'basePath' => "@app/a"
],
],
......
上面代码中,yii2还回去找modules文件夹的partner文件夹,不会过问@app/a,所以应该如下
......
'modules' => [
'partner' => [
'class' => 'app\a\Module',
'basePath' => "@app/a"
],
],
......
简单的说,要psr规范。一般来说不用修改,除非你不想将模块放到modules文件夹内的时候可以用。
version
模块也需要版本,你如果不配置则默认为1.0。
......
'modules' => [
'partner' => [
'class' => 'app\modules\partner\Module',
'version' => "2.0"
],
],
......
我们在模块中可以通过$this->version获取它。
注意:如果你要显示2.0、3.0请用字符串形式,否则会显示2、3。
layoutPath
我想用一句话来说明这个事情,layoutPath + layout = "modules/partner/views/layouts/main.php"
layoutPath代表布局文件所在的目录,这个配置项的末尾没有斜杠。不推荐自定义,如果你非要记住它支持别名。
......
'modules' => [
'partner' => [
'class' => 'app\modules\partner\Module',
'layoutPath' => "@app/a"
],
],
......
有一点要注意,layoutPath必须在设置了layout的情况下才会生效。
viewPath
到这里后我想你自己已经知道viewPath的含义了,视图文件的路径,支持别名。
......
'modules' => [
'partner' => [
'class' => 'app\modules\partner\Module',
'viewPath' => "@app/a"
],
],
......
当访问模块某个action的时候,yii2会去@app/a目录下找视图文件
defaultRoute
默认路由,当我们的路由只是指定模块名时yii2会去寻找defaultRoute的配置,默认是default,所以当你访问index.php?r=partner,则yii2会寻址partner/default/index
如果你要改变它
......
'modules' => [
'partner' => [
'class' => 'app\modules\partner\Module',
'defaultRoute' => "default/say"
],
],
......
按照上面配置,当访问index.php?r=partner时,会寻址partner/default/say
controllerNamespace
一般不需要改变,除非你想改变存放控制器文件的目录名,看下面代码
......
'modules' => [
'partner' => [
'class' => 'app\modules\partner\Module',
'controllerNamespace'=>'app\modules\partner\cs'
],
],
......
然后你的控制器的命名空间需要是
namespace app\modules\partner\cs;
同时控制器的存储文件夹也应该是cs名称
这样才能正常运行,一般不需要自己修改,但是你可以修改。
controllerMap
这个功能适合于接口的统一,比如partner现在想使用外部的控制器,可以如下设置
......
'modules' => [
'partner' => [
'class' => 'app\modules\partner\Module',
'controllerMap' => [
'aaa'=>'app\controllers\SiteController'
]
],
],
......
这样设置后,当我们访问index.php?r=partner/aaa/index 其实访问的是SiteController控制器下的actionIndex
总结
到此为止module设置的常用配置就都已经给大家说完了,感谢你阅读,若有疑问请留言本帖。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。