yii2配置詞典 / 模組(module)配置一覽

阿北哥ya發表於2019-02-26

你可否知道?我們新建一個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。

相關文章