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 相关文章推荐
PHP个人网站架设连环讲(二)
Oct 09 PHP
Mysql和网页显示乱码解决方法集锦
Mar 27 PHP
PHP5中的时间相差8小时的解决办法
Mar 28 PHP
php引用返回与取消引用的详解
Jun 08 PHP
php 模拟POST提交的2种方法详解
Jun 17 PHP
解决FastCGI 进程超过了配置的活动超时时限的问题
Jul 03 PHP
一个简单安全的PHP验证码类 附调用方法
Jun 24 PHP
php头像上传预览实例代码
May 02 PHP
PHP实现的AES加密、解密封装类与用法示例
Aug 02 PHP
Ajax+PHP实现的删除数据功能示例
Feb 12 PHP
laravel 解决paginate查询多个字段报错的问题
Oct 22 PHP
Laravel 微信小程序后端实现用户登录的示例代码
Nov 26 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
深入探讨<br />和 \r\n两者有什么区别??
2013/06/05 PHP
封装ThinkPHP的一个文件上传方法实例
2014/10/31 PHP
PHP数组相关函数汇总
2015/03/24 PHP
PHP格式化显示时间date()函数代码
2018/10/03 PHP
PHP模糊查询技术实例分析【附源码下载】
2019/03/07 PHP
window.open()弹出居中的窗口
2007/02/01 Javascript
javascript arguments 传递给函数的隐含参数
2009/08/21 Javascript
Cookie 小记
2010/04/01 Javascript
JavaScript中继承的一些示例方法与属性参考
2010/08/07 Javascript
Pro JavaScript Techniques学习笔记
2010/12/28 Javascript
基于jquery的代码显示区域自动拉长效果
2011/12/07 Javascript
JQuery操作Select的Options的Bug(IE8兼容性视图模式)
2013/04/21 Javascript
node.js中的emitter.emit方法使用说明
2014/12/10 Javascript
JavaScript头像上传插件源码分享
2016/03/29 Javascript
js创建数组的简单方法
2016/07/27 Javascript
详解vue-router传参的两种方式
2018/09/10 Javascript
解决Vue-cli npm run build生产环境打包,本地不能打开的问题
2018/09/20 Javascript
layui扩展上传组件模拟进度条的方法
2019/09/23 Javascript
vue 实现购物车总价计算
2019/11/06 Javascript
Vue elementui字体图标显示问题解决方案
2020/08/18 Javascript
[03:01]2014DOTA2国际邀请赛 小组赛7月13日TOPPLAY
2014/07/14 DOTA
Django的数据模型访问多对多键值的方法
2015/07/21 Python
Python内置模块logging用法实例分析
2018/02/12 Python
Python分布式进程中你会遇到的问题解析
2019/05/28 Python
解决python文件双击运行秒退的问题
2019/06/24 Python
Python中print函数简单使用总结
2019/08/05 Python
在django中form的label和verbose name的区别说明
2020/05/20 Python
Python使用Pygame绘制时钟
2020/11/29 Python
学会迭代器设计模式,帮你大幅提升python性能
2021/01/03 Python
pandas apply使用多列计算生成新的列实现示例
2021/02/24 Python
html5定位并在百度地图上显示的示例
2014/04/27 HTML / CSS
Lampenwelt德国:欧洲领先的灯具和照明在线商店
2018/08/05 全球购物
世界排名第一的万圣节服装店:Spirit Halloween
2018/10/16 全球购物
英国IT硬件供应商,定制游戏PC:Mesh Computers
2019/03/28 全球购物
光电信息专业应届生求职信
2013/10/07 职场文书
大学毕业生个人总结
2015/02/28 职场文书