YII分模块加载路由的实现方法
时间:2022-07-27
本文章向大家介绍YII分模块加载路由的实现方法,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
起因。因为项目比较大了之后划了很多模块。就使得config下面的路由文件变得很庞大,变得不好维护。这个时候就想如果可以把路由拆分到不同模块去自己管理,就会变得清晰很多。
拆了之后项目配置结构如下
新增了一个modules.php
来管理模块的加载
调整之前 web.php
的模块加载配置如下
'modules' = [
'setup' = [
'class' = 'appcomponentsmodulessetupModule',
],
'shareorder' = [
'class' = 'appcomponentsmodulesshareorderModule',
],
]
调整之后 web.php
模块配置如下
'modules' = require (__DIR__).'/modules.php',
modules.php
里面配置如下
return [
'setup' = [
'class' = 'appcomponentsmodulessetupModule',
],
'shareorder' = [
'class' = 'appcomponentsmodulesshareorderModule',
],
];
然后修改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
文件
每个模块的目录结构
其中Modules.php
是配置当前模块,加载命名空间等。rules.php
为当前模块的下的路由配置
以上就是本文的全部内容,希望对大家的学习有所帮助。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Vue 3 任意传送门——Teleport
- @JsonCreator自定义反序列化函数-JSON框架Jackson精解第5篇
- 不靠谱的 console
- 使用ThreadLocal和ArgumentResolver方便开发
- 【Java8新特性】05 使用Optional取代null
- 在不被spring容器管理的类中使用ApplicationContext应用上下文bean
- Spring boot 在静态类中注入spring组件
- Spring boot 自定义配置文件
- 数据分析 常见技巧和经验总结
- Go by Example 中文版: Base64 编码
- Django3.0+supervisor+uvicorn+nginx进行线上部署
- 前端杂货铺上新
- 短视频系统源代码,实现前置摄像头水平翻转
- linux配置SOCK5代理
- 前端踩坑系列《五》