2

你可否知道?我们新建一个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设置的常用配置就都已经给大家说完了,感谢你阅读,若有疑问请留言本帖。


阿北
4.1k 声望913 粉丝

引用和评论

0 条评论