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 相关文章推荐
一个多文件上传的例子(原创)
Oct 09 PHP
使用PHP实现二分查找算法代码分享
Jun 24 PHP
php调用MySQL存储过程的方法集合(推荐)
Jul 03 PHP
PHP实现把文本中的URL转换为链接的auolink()函数分享
Jul 29 PHP
php返回相对时间(如:20分钟前,3天前)的方法
Apr 14 PHP
Yii使用技巧大汇总
Dec 29 PHP
PHP实现带重试功能的curl连接示例
Jul 28 PHP
ThinkPHP3.2框架使用addAll()批量插入数据的方法
Mar 16 PHP
php编程实现简单的网页版计算器功能示例
Apr 26 PHP
PHP实现的简单对称加密与解密方法实例小结
Aug 28 PHP
实现php删除链表中重复的结点
Sep 27 PHP
laravel自定义分页的实现案例offset()和limit()
Oct 15 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中判断一个字符串包含另一个字符串的方法
2007/03/19 PHP
vs中通过剪切板循环来循环粘贴不同内容
2011/04/30 PHP
PHP实现连接设备、通讯和发送命令的方法
2015/10/13 PHP
VBS通过WMI监视注册表变动的代码
2011/10/27 Javascript
JS中使用Array函数shift和pop创建可忽略参数的例子
2014/05/28 Javascript
jquery获取form表单input元素值的简单实例
2016/05/30 Javascript
window.open不被拦截的简单实现代码(推荐)
2016/08/04 Javascript
Angular ng-class详解及实例代码
2016/09/19 Javascript
微信小程序中顶部导航栏的实现代码
2017/03/30 Javascript
JavaScript面向对象精要(下部)
2017/09/12 Javascript
Angular父组件调用子组件的方法
2018/04/02 Javascript
详解ES6中的三种异步解决方案
2018/06/28 Javascript
element-ui多文件上传的实现示例
2019/04/10 Javascript
express如何解决ajax跨域访问session失效问题详解
2019/06/20 Javascript
微信小程序Echarts覆盖正常组件问题解决
2019/07/13 Javascript
layui的layedit富文本赋值方法
2019/09/18 Javascript
jQuery操作事件完整实例分析
2020/01/10 jQuery
解决vue中的无限循环问题
2020/07/27 Javascript
[01:25]2015国际邀请赛最佳短片奖——斧王《拆塔英雄:天赋异禀》
2015/09/22 DOTA
在Python上基于Markov链生成伪随机文本的教程
2015/04/17 Python
python实现分页效果
2017/10/25 Python
Python爬取当当、京东、亚马逊图书信息代码实例
2017/12/09 Python
PYTHON绘制雷达图代码实例
2019/10/15 Python
python单向链表的基本实现与使用方法【定义、遍历、添加、删除、查找等】
2019/10/24 Python
Django2 连接MySQL及model测试实例分析
2019/12/10 Python
解决Jupyter Notebook使用parser.parse_args出现错误问题
2020/04/20 Python
HTML5网页录音和上传到服务器支持PC、Android,支持IOS微信功能
2019/04/26 HTML / CSS
小学生期末自我鉴定
2014/01/19 职场文书
幼儿园小班教学反思
2014/02/02 职场文书
文秘专业应届生求职信
2014/05/26 职场文书
高等学院职业生涯规划书范文
2014/09/16 职场文书
2014村书记党建工作汇报材料
2014/11/02 职场文书
电影开国大典观后感
2015/06/04 职场文书
MySQL REVOKE实现删除用户权限
2021/06/18 MySQL
SQL实现LeetCode(197.上升温度)
2021/08/07 MySQL
java高级用法JNA强大的Memory和Pointer
2022/04/19 Java/Android