YII分模块加载路由的实现方法


Posted in PHP onOctober 01, 2018

起因。因为项目比较大了之后划了很多模块。就使得config下面的路由文件变得很庞大,变得不好维护。这个时候就想如果可以把路由拆分到不同模块去自己管理,就会变得清晰很多。

拆了之后项目配置结构如下

YII分模块加载路由的实现方法

新增了一个modules.php来管理模块的加载

调整之前 web.php的模块加载配置如下

'modules' => [
  'setup' => [
    'class' => 'appcomponents\modules\setup\Module',
  ],
  'shareorder' => [
    'class' => 'appcomponents\modules\shareorder\Module',
  ],
]

调整之后 web.php模块配置如下

'modules' => require (__DIR__).'/modules.php',

modules.php里面配置如下

return [
  'setup' => [
    'class' => 'appcomponents\modules\setup\Module',
  ],
  'shareorder' => [
    'class' => 'appcomponents\modules\shareorder\Module',
  ],
];

然后修改rules.php

$default = [


];
$modules = require __DIR__.'./modules.php';
$roles = [];
foreach ($modules as $module)
{
  $class = new ReflectionClass($module['class']);
  $filePath = $class->getFileName();
  $filePath = str_replace('Module','rules',$filePath);
  if(file_exists($filePath))
  {
    $role = require $filePath;
    $roles = array_merge($roles,$role);
  }
}
return array_merge($roles,$default);。

利用反射找到每个模块的真实路径,然后加载当前模块下的rules.php文件

每个模块的目录结构

YII分模块加载路由的实现方法

其中Modules.php是配置当前模块,加载命名空间等。rules.php为当前模块的下的路由配置

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
不用数据库的多用户文件自由上传投票系统(1)
Oct 09 PHP
php curl常见错误:SSL错误、bool(false)
Dec 28 PHP
解析php中session的实现原理以及大网站应用应注意的问题
Jun 17 PHP
php jq jquery getJSON跨域提交数据完整版
Sep 13 PHP
php实现批量下载百度云盘文件例子分享
Apr 10 PHP
利用“多说”制作留言板、评论系统
Jul 14 PHP
PHP使用fopen与file_get_contents读取文件实例分享
Mar 04 PHP
thinkPHP实现的联动菜单功能详解
May 05 PHP
php web环境和命令行环境下查找php.ini的位置
Jul 17 PHP
php使用curl模拟多线程实现批处理功能示例
Jul 25 PHP
Thinkphp5.0框架使用模型Model的获取器、修改器、软删除数据操作示例
Oct 11 PHP
PHP实现简单注册登录系统
Dec 28 PHP
php实现微信公众号企业转账功能
Oct 01 #PHP
详解json在php中的应用
Sep 30 #PHP
php实现数组重复数字统计实例
Sep 30 #PHP
PHP APP微信提现接口代码
Sep 30 #PHP
PHP实现微信提现功能
Sep 30 #PHP
PHP实现微信商户支付企业付款到零钱功能
Sep 30 #PHP
Thinkphp 5.0实现微信企业付款到零钱
Sep 30 #PHP
You might like
PHP生成短网址方法汇总
2016/07/12 PHP
php简单计算年龄的方法(周岁与虚岁)
2016/12/06 PHP
PHP中TP5 上传文件的实例详解
2017/07/31 PHP
php实现构建排除当前元素的乘积数组方法
2018/10/06 PHP
JavaScript 数组的 uniq 方法
2008/01/23 Javascript
jQuery DOM操作小结与实例
2010/01/07 Javascript
js实现的日期操作类DateTime函数代码
2010/03/16 Javascript
jQuery与ExtJS之选择实例分析
2010/08/19 Javascript
让AJAX不依赖后端接口实现方案
2012/12/03 Javascript
让网页跳转到指定位置的jquery代码非书签
2013/09/06 Javascript
javascript简单实现图片预加载
2014/12/03 Javascript
浅谈javascript的call()、apply()、bind()的用法
2016/02/21 Javascript
MUI顶部选项卡的用法(tab-top-webview-main)详解
2017/10/08 Javascript
vue-cli开发时,关于ajax跨域的解决方法(推荐)
2018/02/03 Javascript
JS使用setInterval实现的简单计时器功能示例
2018/04/19 Javascript
jQuery实现ajax的嵌套请求案例分析
2019/02/16 jQuery
关于Vue源码vm.$watch()内部原理详解
2019/04/26 Javascript
详解element-ui中el-select的默认选择项问题
2019/08/02 Javascript
在vue中实现某一些路由页面隐藏导航栏的功能操作
2020/09/21 Javascript
python fabric实现远程操作和部署示例
2014/03/25 Python
在Python的gevent框架下执行异步的Solr查询的教程
2015/04/16 Python
unittest+coverage单元测试代码覆盖操作实例详解
2018/04/04 Python
python3第三方爬虫库BeautifulSoup4安装教程
2018/06/19 Python
Python设计模式之代理模式实例详解
2019/01/19 Python
python3使用print打印带颜色的字符串代码实例
2019/08/22 Python
决策树剪枝算法的python实现方法详解
2019/09/18 Python
Python实现中值滤波去噪方式
2019/12/18 Python
Python 中Operator模块的使用
2021/01/30 Python
美国儿童珠宝在线零售商:Loveivy
2019/05/22 全球购物
Sql面试题
2013/03/20 面试题
孕妇离婚协议书范本
2014/11/20 职场文书
2015年教师节贺卡寄语
2015/03/24 职场文书
运动会加油稿50字
2015/07/21 职场文书
2016年小学中秋节活动总结
2016/04/05 职场文书
Springboot如何同时装配两个相同类型数据库
2021/11/17 Java/Android
《王国之心》迎来了发售的20周年, 野村哲发布贺图
2022/04/11 其他游戏