你可否知道?我們新建一個module後在web.php可以對其進行近20項配置?跟我看來~
不知道module?看下面程式碼
// web.php
......
`modules` => [
`partner` => [
`class` => `appmodulespartnerModule`,
],
],
......複製程式碼
class
這是一個必填項,在yii2中很多地方都是這樣的格式,我們想生成一個partner的模組物件,首先要知道是哪個類的物件,class就是這個作用。
通過這個配置我們建立了appmodulespartnerModule的物件。
再比如在db.php中的class也是這個作用,在BaseYii.php的createObject方法中你可以看到具體實現。
layout
佈局引數,選填。
當你不填寫時候會使用yii2應用的佈局檔案,你可以制定一個,比如
......
`modules` => [
`partner` => [
`class` => `appmodulespartnerModule`,
`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` => `appmodulespartnerModule`,
`params` => [`dev`=>`abei2017`],
],
],
......複製程式碼
填寫這個模組的開發者,總之是屬於這個模組的。
id
在邏輯結構上代表一個module,一般不用修改,它和我們模組的目錄名不一定要相等,比如下面程式碼也沒問題
......
`modules` => [
`abc` => [
`class` => `appmodulespartnerModule`,
`id`=>`partnerdd`
],
],
......複製程式碼
我們通過r=abc/default/index 仍然可以進行訪問,此刻module的id=partnerdd
basePath
一般來說不用修改,它代表一個模組的物理路徑,記住要和class一致,否則basePath不會起作用,看下面程式碼
......
`modules` => [
`partner` => [
`class` => `appmodulespartnerModule`,
`basePath` => "@app/a"
],
],
......複製程式碼
上面程式碼中,yii2還回去找modules資料夾的partner資料夾,不會過問@app/a,所以應該如下
......
`modules` => [
`partner` => [
`class` => `appaModule`,
`basePath` => "@app/a"
],
],
......複製程式碼
簡單的說,要psr規範。一般來說不用修改,除非你不想將模組放到modules資料夾內的時候可以用。
version
模組也需要版本,你如果不配置則預設為1.0。
......
`modules` => [
`partner` => [
`class` => `appmodulespartnerModule`,
`version` => "2.0"
],
],
......複製程式碼
我們在模組中可以通過$this->version獲取它。
注意:如果你要顯示2.0、3.0請用字串形式,否則會顯示2、3。
layoutPath
我想用一句話來說明這個事情,layoutPath + layout = “modules/partner/views/layouts/main.php”
layoutPath代表佈局檔案所在的目錄,這個配置項的末尾沒有斜槓。不推薦自定義,如果你非要記住它支援別名。
......
`modules` => [
`partner` => [
`class` => `appmodulespartnerModule`,
`layoutPath` => "@app/a"
],
],
......複製程式碼
有一點要注意,layoutPath必須在設定了layout的情況下才會生效。
viewPath
到這裡後我想你自己已經知道viewPath的含義了,檢視檔案的路徑,支援別名。
......
`modules` => [
`partner` => [
`class` => `appmodulespartnerModule`,
`viewPath` => "@app/a"
],
],
......複製程式碼
當訪問模組某個action的時候,yii2會去@app/a目錄下找檢視檔案
defaultRoute
預設路由,當我們的路由只是指定模組名時yii2會去尋找defaultRoute的配置,預設是default,所以當你訪問index.php?r=partner,則yii2會定址partner/default/index
如果你要改變它
......
`modules` => [
`partner` => [
`class` => `appmodulespartnerModule`,
`defaultRoute` => "default/say"
],
],
......複製程式碼
按照上面配置,當訪問index.php?r=partner時,會定址partner/default/say
controllerNamespace
一般不需要改變,除非你想改變存放控制器檔案的目錄名,看下面程式碼
......
`modules` => [
`partner` => [
`class` => `appmodulespartnerModule`,
`controllerNamespace`=>`appmodulespartnercs`
],
],
......複製程式碼
然後你的控制器的名稱空間需要是
namespace appmodulespartnercs;複製程式碼
同時控制器的儲存資料夾也應該是cs名稱
這樣才能正常執行,一般不需要自己修改,但是你可以修改。
controllerMap
這個功能適合於介面的統一,比如partner現在想使用外部的控制器,可以如下設定
......
`modules` => [
`partner` => [
`class` => `appmodulespartnerModule`,
`controllerMap` => [
`aaa`=>`appcontrollersSiteController`
]
],
],
......複製程式碼
這樣設定後,當我們訪問index.php?r=partner/aaa/index 其實訪問的是SiteController控制器下的actionIndex
總結
到此為止module設定的常用配置就都已經給大家說完了,感謝你閱讀,若有疑問請留言本帖。
原文來自 北哥兄弟連(nai8.me) ,版權所有 轉載請聯絡我微信 abei-pg。