▪ 环境
基于《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语句