你能否知道?咱們新建一個module後在web.php能夠對其進行近20項配置?跟我看來~php
不知道module?看下面代碼web
// web.php ...... 'modules' => [ 'partner' => [ 'class' => 'app\modules\partner\Module', ], ], ......
這是一個必填項,在yii2中不少地方都是這樣的格式,咱們想生成一個partner的模塊對象,首先要知道是哪一個類的對象,class就是這個做用。數組
經過這個配置咱們創建了appmodulespartnerModule的對象。yii2
再好比在db.php中的class也是這個做用,在BaseYii.php的createObject方法中你能夠看到具體實現。app
佈局參數,選填。yii
當你不填寫時候會使用yii2應用的佈局文件,你能夠制定一個,好比佈局
...... 'modules' => [ 'partner' => [ 'class' => 'app\modules\partner\Module', 'layout' => 'main' ], ], ......
yii2會去尋找模塊視圖中的layouts/main.php文件。this
重點:layout值是一個路徑,不是一個名稱,看下面的解釋。spa
/a/main 尋找@app/views/layouts/a/main.phpcode
a/main 尋找 @app/modules/partner/views/layouts/a/main.php
明白了吧。另外layout能夠爲false,表明禁用佈局。
咱們能夠爲模塊設置一些參數,數組形式。記住這個參數屬於整個模塊,你能夠在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設置的經常使用配置就都已經給你們說完了,感謝你閱讀,如有疑問請留言本帖。