亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

?? ??? ??
閱讀前篇 簡介 Yii 是什么 從 Yii 1.1 升級 入門 安裝 Yii 運(yùn)行應(yīng)用 第一次問候 使用Forms 數(shù)據(jù)庫應(yīng)用 使用 Gii 生成代碼 進(jìn)階 應(yīng)用結(jié)構(gòu) 概述 入口腳本 應(yīng)用(Applications) 應(yīng)用組件(Application Components) 控制器(Controllers) 模型(Models) 視圖(views) 模塊(Modules) 過濾器(Filters) 小部件(Widgets) 前端資源(Assets) 擴(kuò)展(Extensions) 請求處理 運(yùn)行概述 啟動(dòng)引導(dǎo)(Bootstrapping) 路由和創(chuàng)建URL 請求(Requests) 響應(yīng)(Responses) Sessions 和 Cookies 錯(cuò)誤處理(Handling Errors) 日志(Logging) 關(guān)鍵概念 組件(Component) 屬性(Property) 事件(Events) 行為(Behaviors) 配置(Configurations) 別名(Aliases) 類自動(dòng)加載(Autoloading) 服務(wù)定位器(Service Locator) 依賴注入容器(Dependency Injection Container) 配合數(shù)據(jù)庫工作 數(shù)據(jù)庫訪問 (Data Access Objects) 查詢生成器(Query Builder) 活動(dòng)記錄(Active Record) 數(shù)據(jù)庫遷移(Migrations) Sphinx Redis MongoDB Elasticsearch 接收用戶數(shù)據(jù) 創(chuàng)建表單(Creating Forms) 輸入驗(yàn)證(Validating Input) 文件上傳(Uploading Files) 收集列表輸入(Collecting Tabular Input) 多模型的復(fù)合表單(Getting Data for Multiple Models) 顯示數(shù)據(jù) 格式化輸出數(shù)據(jù)(Data Formatting) 分頁(Pagination) 排序(Sorting) 數(shù)據(jù)提供器(Data Providers) 數(shù)據(jù)小部件(Data Widgets) 客戶端腳本使用(Working with Client Scripts) 主題(Theming) 安全 認(rèn)證(Authentication) 授權(quán)(Authorization) 處理密碼(Working with Passwords) 客戶端認(rèn)證(Auth Clients) 最佳安全實(shí)踐(Best Practices) 緩存 概述 數(shù)據(jù)緩存 片段緩存 頁面緩存 HTTP 緩存 RESTfull Web服務(wù) 快速入門(Quick Start) 資源(Resources) 控制器(Controllers) 路由(Routing) 格式化響應(yīng)(Response Formatting) 授權(quán)認(rèn)證(Authentication) 速率限制(Rate Limiting) 版本(Versioning) 錯(cuò)誤處理(Error Handling) 開發(fā)工具 調(diào)試工具欄和調(diào)試器 使用Gii生成代碼 生成API文檔 測試 概述(Overview) 配置測試環(huán)境(Testing environment setup) 單元測試(Unit Tests) 功能測試(Function Tests) 驗(yàn)收測試(Acceptance Tests) 測試夾具(Fixtures) 高級專題 高級應(yīng)用模板 創(chuàng)建自定義應(yīng)用程序結(jié)構(gòu) 控制臺(tái)命令 核心驗(yàn)證器(Core Validators) 國際化 收發(fā)郵件 性能優(yōu)化 共享主機(jī)環(huán)境 模板引擎 集成第三方代碼 小部件 Bootstrap 小部件 Jquery UI 助手類 概述 Array 助手(ArrayHelper) Html 助手(Html) Url 助手(Url)
??

模塊

模塊

模塊是獨(dú)立的軟件單元,由模型,?視圖,?控制器和其他支持組件組成, 終端用戶可以訪問在應(yīng)用主體中已安裝的模塊的控制器, 模塊被當(dāng)成小應(yīng)用主體來看待,和應(yīng)用主體不同的是, 模塊不能單獨(dú)部署,必須屬于某個(gè)應(yīng)用主體。

創(chuàng)建模塊

模塊被組織成一個(gè)稱為yii\base\Module::basePath的目錄, 在該目錄中有子目錄如controllers,?models,?views?分別為對應(yīng)控制器,模型,視圖和其他代碼,和應(yīng)用非常類似。 如下例子顯示一個(gè)模型的目錄結(jié)構(gòu):

forum/
    Module.php                   模塊類文件
    controllers/                 包含控制器類文件
        DefaultController.php    default 控制器類文件
    models/                      包含模型類文件
    views/                       包含控制器視圖文件和布局文件
        layouts/                 包含布局文件
        default/                 包含DefaultController控制器視圖文件
            index.php            index視圖文件

模塊類

每個(gè)模塊都有一個(gè)繼承yii\base\Module的模塊類,該類文件直接放在模塊的yii\base\Module::basePath目錄下, 并且能被?自動(dòng)加載。當(dāng)一個(gè)模塊被訪問,和?應(yīng)用主體實(shí)例?類似會(huì)創(chuàng)建該模塊類唯一實(shí)例,模塊實(shí)例用來幫模塊內(nèi)代碼共享數(shù)據(jù)和組件。

以下示例一個(gè)模塊類大致定義:

namespace app\modules\forum;

class Module extends \yii\base\Module{
    public function init()
    {
        parent::init();

        $this->params['foo'] = 'bar';
        // ...  其他初始化代碼 ...
    }
}

如果?init()?方法包含很多初始化模塊屬性代碼, 可將他們保存在配置?并在init()中使用以下代碼加載:

public function init(){
    parent::init();
    // 從config.php加載配置來初始化模塊
    \Yii::configure($this, require(__DIR__ . '/config.php'));
}

config.php配置文件可能包含以下內(nèi)容,類似應(yīng)用主體配置.

<?phpreturn [
    'components' => [
        // list of component configurations
    ],
    'params' => [
        // list of parameters
    ],
];

模塊中的控制器

創(chuàng)建模塊的控制器時(shí),慣例是將控制器類放在模塊類命名空間的controllers子命名空間中, 也意味著要將控制器類文件放在模塊yii\base\Module::basePath目錄中的controllers子目錄中。 例如,上小節(jié)中要在forum模塊中創(chuàng)建post控制器,應(yīng)像如下申明控制器類:

namespace app\modules\forum\controllers;

use yii\web\Controller;

class PostController extends Controller{
    // ...
}

可配置yii\base\Module::controllerNamespace屬性來自定義控制器類的命名空間, 如果一些控制器不再該命名空間下,可配置yii\base\Module::controllerMap屬性讓它們能被訪問, 這類似于?應(yīng)用主體配置?所做的。

模塊中的視圖

視圖應(yīng)放在模塊的yii\base\Module::basePath對應(yīng)目錄下的?views?目錄, 對于模塊中控制器對應(yīng)的視圖文件應(yīng)放在views/ControllerID?目錄下, 其中ControllerID對應(yīng)?控制器 ID. For example, if 例如,假定控制器類為PostController,目錄對應(yīng)模塊yii\base\Module::basePath目錄下的?views/post?目錄。

模塊可指定?布局,它用在模塊的控制器視圖渲染。 布局文件默認(rèn)放在?views/layouts?目錄下,可配置yii\base\Module::layout屬性指定布局名, 如果沒有配置?layout?屬性名,默認(rèn)會(huì)使用應(yīng)用的布局。

使用模塊

要在應(yīng)用中使用模塊,只需要將模塊加入到應(yīng)用主體配置的yii\base\Application::modules屬性的列表中, 如下代碼的應(yīng)用主體配置?使用forum?模塊:

[
    'modules' => [
        'forum' => [
            'class' => 'app\modules\forum\Module',
            // ... 模塊其他配置 ...
        ],
    ],
]

yii\base\Application::modules 屬性使用模塊配置數(shù)組,每個(gè)數(shù)組鍵為模塊 ID, 它標(biāo)識(shí)該應(yīng)用中唯一的模塊,數(shù)組的值為用來創(chuàng)建模塊的配置。

路由

和訪問應(yīng)用的控制器類似,路由?也用在模塊中控制器的尋址, 模塊中控制器的路由必須以模塊ID開始,接下來為控制器ID和操作ID。 例如,假定應(yīng)用使用一個(gè)名為?forum?模塊,路由forum/post/index?代表模塊中?post?控制器的?index?操作, 如果路由只包含模塊ID,默認(rèn)為?default?的yii\base\Module::defaultRoute 屬性來決定使用哪個(gè)控制器/操作, 也就是說路由?forum?可能代表?forum?模塊的default?控制器。

訪問模塊

在模塊中,可能經(jīng)常需要獲取模塊類的實(shí)例來訪問模塊ID,模塊參數(shù),模塊組件等, 可以使用如下語句來獲?。?/p>

$module = MyModuleClass::getInstance();

其中?MyModuleClass?對應(yīng)你想要的模塊類,getInstance()?方法返回當(dāng)前請求的模塊類實(shí)例, 如果模塊沒有被請求,該方法會(huì)返回空,注意不需要手動(dòng)創(chuàng)建一個(gè)模塊類,因?yàn)槭謩?dòng)創(chuàng)建的和Yii處理請求時(shí)自動(dòng)創(chuàng)建的不同。

補(bǔ)充: 當(dāng)開發(fā)模塊時(shí),你不能假定模塊使用固定的ID,因?yàn)樵趹?yīng)用或其他沒模塊中,模塊可能會(huì)對應(yīng)到任意的ID, 為了獲取模塊ID,應(yīng)使用上述代碼獲取模塊實(shí)例,然后通過$module->id獲取模塊ID。

也可以使用如下方式訪問模塊實(shí)例:

// 獲取ID為 "forum" 的模塊$module = \Yii::$app->getModule('forum');

// 獲取處理當(dāng)前請求控制器所屬的模塊$module = \Yii::$app->controller->module;

第一種方式僅在你知道模塊ID的情況下有效,第二種方式在你知道處理請求的控制器下使用。

一旦獲取到模塊實(shí)例,可訪問注冊到模塊的參數(shù)和組件,例如:

$maxPostCount = $module->params['maxPostCount'];

引導(dǎo)啟動(dòng)模塊

有些模塊在每個(gè)請求下都有運(yùn)行, yii\debug\Module 模塊就是這種, 為此將這種模塊加入到應(yīng)用主體的 yii\base\Application::bootstrap 屬性中。

例如,如下示例的應(yīng)用主體配置會(huì)確保debug模塊每次都被加載:

[
    'bootstrap' => [
        'debug',
    ],

    'modules' => [
        'debug' => 'yii\debug\Module',
    ],
]

模塊嵌套

模塊可無限級嵌套,也就是說,模塊可以包含另一個(gè)包含模塊的模塊,我們稱前者為父模塊,后者為子模塊, 子模塊必須在父模塊的yii\base\Module::modules屬性中申明,例如:

namespace app\modules\forum;

class Module extends \yii\base\Module{
    public function init()
    {
        parent::init();

        $this->modules = [
            'admin' => [
                // 此處應(yīng)考慮使用一個(gè)更短的命名空間
                'class' => 'app\modules\forum\modules\admin\Module',
            ],
        ];
    }
}

在嵌套模塊中的控制器,它的路由應(yīng)包含它所有祖先模塊的ID,例如forum/admin/dashboard/index?代表 在模塊forum中子模塊admindashboard控制器的index操作。

最佳實(shí)踐

模塊在大型項(xiàng)目中常備使用,這些項(xiàng)目的特性可分組,每個(gè)組包含一些強(qiáng)相關(guān)的特性, 每個(gè)特性組可以做成一個(gè)模塊由特定的開發(fā)人員和開發(fā)組來開發(fā)和維護(hù)。

在特性組上,使用模塊也是重用代碼的好方式,一些常用特性,如用戶管理,評論管理,可以開發(fā)成模塊, 這樣在相關(guān)項(xiàng)目中非常容易被重用。
?? ??: ?? ??: