? 環境
基于《Yii2 之 frontend 子模塊實踐之一:添加前后臺子模塊》。
? 前言
默認情況下,兩個 子模塊 直接使用 應用主體 的配置:/frontend/config/main.php,這其實是一個非常大的坑:
?當你想前臺啟用 URL 美化的時候,你修改了 /frontend/config/main.php 并啟用成功,但是此時你會發現后臺居然也跟著啟用了URL美化,這并不是你所想要的
?當你在 /frontend/config/main.php 設置了后臺的管理員身份驗證類 'identityClass' => 'common\models\AdminIdentity' 后,你會發現前臺的會員身份驗證類 UserIdentity 沒有地方可以設置了
還有很多組件,如果全部統一使用 /frontend/config/main.php 配置文件,將會出現更多的問題,所以比較好解決辦法就是:應用主體 的配置 + 子模塊的獨立配置
? 配置子模塊的別名
編輯 index 和 admin 子模塊 根目錄下的 Module.php 文件,在 init() 函數里添加模塊的物理路徑別名:
// 設置別名
Yii::setAlias('@module', '@app/modules/'.$this->id);
根據項目的實際需要你可以在此處添加其他別名,這里設置的 @module 將在下面的內容使用
? 加載子模塊的配置
編輯 index 和 admin 子模塊 根目錄下的 Module.php 文件,在 init() 函數里添加子模塊配置的加載代碼:
// 設置別名
Yii::setAlias('@module', '@app/modules/'.$this->id);
// 初始模塊配置
$config = require(__DIR__.'/Config.php');
$components = Yii::$app->getComponents();
foreach( $config['components'] AS $k=>$component ){
if( isset($component['class']) && isset($components[$k]) == false ) continue;
$config['components'][$k] = array_merge($components[$k], $component);
}
Yii::configure(Yii::$app, $config);
代碼解釋:
// 加載子模塊獨立配置文件
// 請在每個子模塊的 Module.php 同級目錄下創建 Config.php 文件
$config = require(__DIR__.'/Config.php');
// 獲取應用程序的組件
$components = Yii::$app->getComponents();
// 遍歷子模塊獨立配置的組件部分,并繼承應用程序的組件配置
foreach( $config['components'] AS $k=>$component ){
if( isset($component['class']) && isset($components[$k]) == false ) continue;
$config['components'][$k] = array_merge($components[$k], $component);
}
// 將新的配置設置到應用程序
// 網上很多文章搜過來都是寫 Yii::configure($this, $config),但是并不適用子模塊,必須寫 Yii::$app
Yii::configure(Yii::$app, $config);
? 編寫子模塊的配置文件
編輯 index 和 admin 子模塊 根目錄下的 Config.php 文件,這里是我常用的配置,具體可自行按實際需要配置。
前臺配置示例:
<?php
$configs['layout'] = '@module/views/layouts/main';
$configs['components'] = array();
$configs['components']['i18n']['translations'] = array();
$configs['components']['i18n']['translations']['*'] = array();
$configs['components']['i18n']['translations']['*']['class'] = 'yii\i18n\PhpMessageSource';
$configs['components']['i18n']['translations']['*']['basePath'] = '@module/languages';
//$configs['components']['user'] = array();
//$configs['components']['user']['identityClass'] = 'common\models\MemberIdentity';
//$configs['components']['user']['identityCookie'] = array('name'=>'_identity-frontend-index', 'httpOnly'=>true);
//$configs['components']['user']['enableAutoLogin'] = true;
$configs['components']['session'] = array('name'=>'advanced-frontend-index');
$configs['components']['request'] = array('enableCsrfValidation'=>false, 'csrfParam'=>'_csrf-frontend-index');
return $configs;
后臺配置示例:
<?php
$configs['layout'] = '@module/views/layouts/main';
$configs['components'] = array();
$configs['components']['i18n']['translations'] = array();
$configs['components']['i18n']['translations']['*'] = array();
$configs['components']['i18n']['translations']['*']['class'] = 'yii\i18n\PhpMessageSource';
$configs['components']['i18n']['translations']['*']['basePath'] = '@module/languages';
$configs['components']['user'] = array();
$configs['components']['user']['identityClass'] = 'common\models\AdminIdentity';
$configs['components']['user']['identityCookie'] = array('name'=>'_identity-frontend-admin', 'httpOnly'=>true);
$configs['components']['user']['enableAutoLogin'] = true;
$configs['components']['session'] = array('name'=>'advanced-frontend-admin');
$configs['components']['request'] = array('enableCsrfValidation'=>false, 'csrfParam'=>'_csrf-frontend-kernel');
return $configs;
- Yii2使用Url組件
- Yii2的Html,Request組件詳解
- YII2.0框架, 多圖片上傳功能
- yii2-imagine配置
- 有潔癖的禁止默認YII自帶垃圾代碼(個人認為)、JS、CSS(新手教程)
- Yii2 API接口輸出統一Json和jsonp格式方法
- MySql 創建表的一些語句釋義
- Yii2聯合查詢(配合GridView)
- Yii 通用系統字典
- ArrayHelper的多維數組排序函數multisort,強大無比。
- 路由規則,在Url中替換使用'/'以外的符號連接
- 從excel文件中讀取表格內容,并批量寫入數據庫
- yii2注冊時驗證用戶名、郵箱等唯一性
- Yii2最全的實戰教程
- Composer安裝yii2-imagine 壓縮,剪切,旋轉,水印
- LinkPager增加總頁數 和總記錄數
- Yii2 獲取模塊名控制器名方法名
- Yii2使用yii2-adminlte+yii2-admin左側菜單子路徑不高亮問題又解
- 前端CSS框架
- Yii2 之 frontend 子模塊實踐之一:添加前后臺子模塊
- Yii2 之 frontend 子模塊實踐之二:構建子模塊的獨立配置
- Yii2 之 frontend 子模塊實踐之三:布局和語言配置
- 完美解決ajax驗證碼不刷新問題,讓驗證碼更加美觀,不修改任何源代碼
- yii2.0 表單小部件常用的默認選中
- Yii2 controller 傳值給layout
- yii2 dropDownList 二級和三級 聯動寫法
- 微信掃碼登錄 新窗口二維碼 掃完關閉二維碼頁面 進入登錄頁面
- yii2 實現 "上一篇,下一篇" 功能
- Yii 行為簡單應用
- SQL語句