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文件上传实例详解!!!
Jan 02 PHP
php面向对象全攻略 (四)构造方法与析构方法
Sep 30 PHP
PHP学习 变量使用总结
Mar 24 PHP
php中XMLHttpRequest(Ajax)不能设置自定义的Referer的解决方法
Nov 26 PHP
解析PHP跨站刷票的实现代码
Jun 18 PHP
使用swoole扩展php websocket示例
Feb 13 PHP
php中debug_backtrace、debug_print_backtrace和匿名函数用法实例
Dec 01 PHP
PHP扩展开发入门教程
Feb 26 PHP
typecho插件编写教程(一):Hello World
May 28 PHP
利用PHP将图片转换成base64编码的实现方法
Sep 13 PHP
PHP反射原理与用法深入分析
Sep 28 PHP
Laravel配合jwt使用的方法实例
Oct 25 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
windows下PHP_intl.dll正确配置方法(apache2.2+php5.3.5)
2014/01/14 PHP
PHP获取数组中重复最多的元素的实现方法
2014/11/11 PHP
ThinkPHP防止重复提交表单的方法实例分析
2018/05/10 PHP
斜45度寻路实现函数
2009/08/20 Javascript
IE Firefox 使用自定义标签的区别
2009/10/15 Javascript
本地对象Array的原型扩展实现代码
2010/12/04 Javascript
JavaScript高级程序设计(第3版)学习笔记9 js函数(下)
2012/10/11 Javascript
Jjcarousellite 实现图片列表滚动的简单实例
2013/11/29 Javascript
Javascript正则控制文本框只能输入整数或浮点数
2014/09/02 Javascript
jQuery事件绑定用法详解(附bind和live的区别)
2016/01/19 Javascript
浅谈jquery点击label触发2次的问题
2016/06/12 Javascript
微信小程序 WXML、WXSS 和JS介绍及详解
2016/10/08 Javascript
概述jQuery中的ajax方法
2016/12/16 Javascript
js实现图片上传预览原理分析
2017/07/13 Javascript
angular2实现统一的http请求头方法
2018/08/13 Javascript
JS浅拷贝和深拷贝原理与实现方法分析
2019/02/28 Javascript
vue实现输入框的模糊查询的示例代码(节流函数的应用场景)
2019/09/01 Javascript
vue基于v-charts封装双向条形图的实现代码
2019/12/09 Javascript
如何区分vue中的v-show 与 v-if
2020/09/08 Javascript
vue3.0 的 Composition API 的使用示例
2020/10/26 Javascript
Python实现信用卡系统(支持购物、转账、存取钱)
2016/06/24 Python
使用pandas读取csv文件的指定列方法
2018/04/21 Python
python使用PIL给图片添加文字生成海报示例
2018/08/17 Python
Python实现报警信息实时发送至邮箱功能(实例代码)
2019/11/11 Python
pytorch实现MNIST手写体识别
2020/02/14 Python
HTML5添加禁止缩放功能
2017/11/03 HTML / CSS
解决HTML5中滚动到底部的事件问题
2019/08/22 HTML / CSS
欧尚俄罗斯网上超市:Auchan俄罗斯
2018/05/03 全球购物
校园歌咏比赛主持词
2014/03/18 职场文书
法人授权委托书
2014/04/03 职场文书
推广普通话演讲稿
2014/05/23 职场文书
2014物价局群众路线对照检查材料思想汇报
2014/09/21 职场文书
青年联谊会致辞
2015/07/31 职场文书
2016先进工作者事迹材料
2016/02/25 职场文书
Mysql Show Profile
2021/04/05 MySQL
MySQL七种JOIN类型小结
2021/10/24 MySQL