你能否知道?咱們新建一個module後在web.php能夠對其進行近20項配置?跟我看來~php
不知道module?看下面代碼web
// web.php
......
'modules' => [
'partner' => [
'class' => 'app\modules\partner\Module',
],
],
......複製代碼
這是一個必填項,在yii2中不少地方都是這樣的格式,咱們想生成一個partner的模塊對象,首先要知道是哪一個類的對象,class就是這個做用。數組
經過這個配置咱們創建了app\modules\partner\Module的對象。微信
再好比在db.php中的class也是這個做用,在BaseYii.php的createObject方法中你能夠看到具體實現。yii2
佈局參數,選填。app
當你不填寫時候會使用yii2應用的佈局文件,你能夠制定一個,好比yii
......
'modules' => [
'partner' => [
'class' => 'app\modules\partner\Module',
'layout' => 'main'
],
],
......複製代碼
yii2會去尋找模塊視圖中的layouts/main.php文件。佈局
重點:layout值是一個路徑,不是一個名稱,看下面的解釋。this
明白了吧。另外layout能夠爲false,表明禁用佈局。spa
咱們能夠爲模塊設置一些參數,數組形式。記住這個參數屬於整個模塊,你能夠在Module類中使用$this->params得到它們。
固然你在模塊的控制器中也能夠經過$this->module->params得到。
好比下面代碼
......
'modules' => [
'partner' => [
'class' => 'app\modules\partner\Module',
'params' => ['dev'=>'abei2017'],
],
],
......複製代碼
填寫這個模塊的開發者,總之是屬於這個模塊的。
在邏輯結構上表明一個module,通常不用修改,它和咱們模塊的目錄名不必定要相等,好比下面代碼也沒問題
......
'modules' => [
'abc' => [
'class' => 'app\modules\partner\Module',
'id'=>'partnerdd'
],
],
......複製代碼
咱們經過r=abc/default/index 仍然能夠進行訪問,此刻module的id=partnerdd
通常來講不用修改,它表明一個模塊的物理路徑,記住要和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文件夾內的時候能夠用。
模塊也須要版本,你若是不配置則默認爲1.0。
......
'modules' => [
'partner' => [
'class' => 'app\modules\partner\Module',
'version' => "2.0"
],
],
......複製代碼
咱們在模塊中能夠經過$this->version獲取它。
注意:若是你要顯示2.0、3.0請用字符串形式,不然會顯示二、3。
我想用一句話來講明這個事情,layoutPath + layout = "modules/partner/views/layouts/main.php"
layoutPath表明佈局文件所在的目錄,這個配置項的末尾沒有斜槓。不推薦自定義,若是你非要記住它支持別名。
......
'modules' => [
'partner' => [
'class' => 'app\modules\partner\Module',
'layoutPath' => "@app/a"
],
],
......複製代碼
有一點要注意,layoutPath必須在設置了layout的狀況下才會生效。
到這裏後我想你本身已經知道viewPath的含義了,視圖文件的路徑,支持別名。
......
'modules' => [
'partner' => [
'class' => 'app\modules\partner\Module',
'viewPath' => "@app/a"
],
],
......複製代碼
當訪問模塊某個action的時候,yii2會去@app/a目錄下找視圖文件
默認路由,當咱們的路由只是指定模塊名時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
通常不須要改變,除非你想改變存放控制器文件的目錄名,看下面代碼
......
'modules' => [
'partner' => [
'class' => 'app\modules\partner\Module',
'controllerNamespace'=>'app\modules\partner\cs'
],
],
......複製代碼
而後你的控制器的命名空間須要是
namespace app\modules\partner\cs;複製代碼
同時控制器的存儲文件夾也應該是cs名稱
這樣才能正常運行,通常不須要本身修改,可是你能夠修改。
這個功能適合於接口的統一,好比partner如今想使用外部的控制器,能夠以下設置
......
'modules' => [
'partner' => [
'class' => 'app\modules\partner\Module',
'controllerMap' => [
'aaa'=>'app\controllers\SiteController'
]
],
],
......複製代碼
這樣設置後,當咱們訪問index.php?r=partner/aaa/index 其實訪問的是SiteController控制器下的actionIndex
到此爲止module設置的經常使用配置就都已經給你們說完了,感謝你閱讀,如有疑問請留言本帖。
原文來自 北哥兄弟連(nai8.me) ,版權全部 轉載請聯繫我微信 abei-pg。