zxf/modules
Composer 安装命令:
composer require zxf/modules
包简介
一个适用于Laravel 11+ / 12+ / 13+ 版本的现代化、多模块化扩展
README 文档
README
一个为 Laravel 11+ / 12+ / 13+ 设计的现代化、工业级模块化系统,基于 PHP 8.2+ 开发。
📦 快速安装
通过 Composer 安装
composer require zxf/modules
1. 发布配置文件
php artisan vendor:publish --tag=modules-config
配置文件会发布到:config/modules.php
「非常重要」模块发现:在项目 composer.json 中新增自动加载
"autoload": {
"psr-4": {
"App\\": "app/",
"Modules\\": "Modules/", <-- 增加本行即可
}
},
重新加载composer
composer dump-autoload
2. 创建第一个模块
php artisan module:make Blog
3. 查看模块列表
php artisan module:list
4. 查看模块详细信息
php artisan module:info Blog
5. 验证模块
php artisan module:validate Blog
6. 发布多模块资源
# 发布所有资源(用户指南、配置文件) php artisan module:publish # 仅发布用户指南 php artisan module:publish --guide # 仅发布配置文件 php artisan module:publish --config # 强制覆盖已存在的文件 php artisan module:publish --force
发布后,多模块用户指南将位于:Modules/UserGuide.md
7. 运行模块迁移
# 运行所有模块的迁移 php artisan module:migrate # 运行指定模块的迁移 php artisan module:migrate Blog # 查看迁移状态 php artisan module:migrate-status # 回滚迁移 php artisan module:migrate:reset Blog # 刷新迁移(回滚并重新运行) php artisan module:migrate:refresh Blog
8. 运行模块命令
# 运行模块的默认命令 php artisan blog:command # 创建自定义命令 php artisan module:make-command Blog TestCommand --command=blog:test # 运行自定义命令 php artisan blog:test # 调试命令注册 php artisan module:debug-commands --module=Blog
9. 删除模块
# 删除模块(会提示确认) php artisan module:delete Blog # 强制删除(不提示确认) php artisan module:delete Blog --force
扩展宏(MySQL 8.0+ 优化版)
弥补 Laravel 查询缺陷,专为 Laravel 11+ / 12+ / 13+ 和 MySQL 8.0+ 设计的高性能查询扩展
新特性 v2.0:
- 8大类 100+ 宏函数
- MySQL 8.4+ 窗口函数完整支持
- 超大表快速分页(无需游标ID)
- 高级 JSON 操作
- 正则表达式查询
- 纯 SQL 优化,无需缓存
功能概览
| 类别 | 功能数 | 说明 |
|---|---|---|
| whereHas优化 | 10+ | 解决关联查询全表扫描问题 |
| 随机查询 | 2 | 高效随机数据获取 |
| 窗口函数 | 25+ | MySQL 8.4+ 窗口函数完整支持 |
| 递归查询 | 10 | 树形结构数据处理 |
| 分页优化 | 5 | 超大表快速分页 |
| JSON操作 | 20+ | 高级JSON查询和操作 |
| 正则表达式 | 15+ | 强大的文本匹配功能 |
| 主表字段 | 8 | 自动表前缀避免歧义 |
快速示例
// 窗口函数排名 Employee::query() ->rowNumber('department_id', 'salary', 'desc', 'rank_in_dept') ->rank(null, 'score', 'desc', 'competition_rank') ->get(); // 超大表快速分页(第5000页) $records = BigTable::query()->fastPaginate(30, 5000); // 游标分页(性能最佳) $posts = Post::query()->cursorPaginate(20, null, 'published_at', 'desc'); // JSON 高级查询 User::query() ->jsonPath('settings', '$.notifications.email', 'email_enabled', false) ->whereJsonArrayContains('tags', 'php') ->get(); // 正则表达式匹配 User::query()->whereRegexp('email', '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$')->get();
random / groupRandom - 随机查询
// 随机查询5条记录 Student::where('class_id', 101)->random(5)->get(); // 每个班级随机选择2名学生 Student::groupRandom('class_id', 2)->get();
whereHasIn 系列 - 关联查询优化
// 优化版关联查询(避免全表扫描) User::query()->whereHasIn('posts', fn($q) => $q->where('status', 1))->get(); // 关联 JOIN 查询 User::query()->whereHasLeftJoin('orders')->get(); // 多态关联 Comment::query()->whereHasMorphIn('commentable', [Post::class, Video::class])->get();
窗口函数 - MySQL 8.0+ 专用
// 排名函数 Employee::query()->rowNumber('dept_id', 'salary', 'desc', 'row_num')->get(); Employee::query()->rank('dept_id', 'salary', 'desc', 'rank_num')->get(); Employee::query()->denseRank('dept_id', 'salary', 'desc', 'dense_rank')->get(); // 偏移函数(环比分析) Sales::query()->lag('amount', 1, 0, null, 'date', 'asc', 'prev_day')->get(); Sales::query()->lead('amount', 1, null, null, 'date', 'asc', 'next_day')->get(); // 聚合窗口 Sales::query()->sumOver('amount', 'region', null, 'asc', 'dept_total')->get(); // 累计统计 Sales::query()->cumulativeSum('amount', 'region', 'date', 'asc', 'running_total')->get(); Stock::query()->movingAverage('price', 5, 'code', 'date', 'asc', 'ma5')->get();
分页优化 - 超大表解决方案
// 智能快速分页(自动选择最优策略) $users = User::query()->fastPaginate(20); // 简单分页(不计算总数,性能更好) $posts = Post::query()->fastSimplePaginate(10); // 游标分页(键集分页,性能最佳) $items = Item::query()->cursorPaginate(20, null, 'created_at', 'desc'); // 寻址分页(适合深度分页) $page100 = BigTable::query()->seekPaginate(100, $bookmarks, 100);
JSON 操作 - MySQL 8.0+ JSON函数
// JSON 路径提取 User::query()->jsonPath('settings', '$.email', 'user_email')->get(); User::query()->jsonExtract('data', '$.count', 'int', 'item_count', 0)->get(); // JSON 数组操作 Article::query()->whereJsonArrayContains('tags', 'php')->get(); Article::query()->whereJsonArrayContainsAny('tags', ['php', 'laravel'])->get(); Article::query()->jsonArrayLength('tags', null, 'tag_count')->get(); // JSON 存在性检查 User::query()->whereJsonPathExists('settings', '$.notifications')->get();
正则表达式 - 文本匹配
// 正则匹配 User::query()->whereRegexp('email', '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$')->get(); // 正则提取 User::query()->regexpExtract('email', '@([^@]+)$', 1, 1, 'i', 'domain')->get(); // 正则替换 User::query()->regexpReplace('phone', '(\d{3})\d{4}(\d{4})', '$1****$2', 0, 'c', 'masked_phone')->get();
更多文档
详细文档请查看:扩展宏完整文档
📖 文档目录
快速开始
核心功能
路由与视图
开发指南
最佳实践
🚀 特性
- 现代化架构:专为 Laravel 11+ / 12+ / 13+ 和 PHP 8.2+ 设计
- 配置驱动:通过 config 控制所有模块行为,无需 JSON 文件
- 模块启用/禁用:通过配置文件控制模块是否启用,禁用时完全不加载模块组件
- 动态路由生成:路由前缀和名称前缀根据配置动态生成
- 自动发现机制:自动发现模块的服务提供者、路由、命令、事件等
- 灵活配置:支持多路由中间件组、控制器命名空间映射
- 功能完整:支持路由、视图、配置、迁移、命令、事件等完整功能
- 信息统计:提供详细的模块信息和验证功能
- 迁移增强:完整的迁移管理命令,包括状态查看和统计信息
- 助手函数:40+ 个便捷助手函数,大部分支持无参调用
- 模块验证:验证模块的完整性和正确性
- 模板系统:基于 stubs 的代码生成模板系统
- 视图命名空间:支持模块视图命名空间,如
blog::list.test - 路由映射:灵活的路由控制器命名空间映射
- 多路径扫描:支持多个模块目录扫描
- 智能检测:自动检测当前模块,支持嵌套配置读取
- 高性能:优化的核心函数,保证生产环境高效运行
- 命令自动注册:模块命令自动发现并注册到 Laravel Console Application
- 详细的中文日志:所有操作都有详细的中文日志记录
- 智能模型生成:支持从数据库表自动解析字段信息,生成完整的 Eloquent 模型
- 字段注释解析:自动读取数据库字段注释并生成到模型的 PHPDoc 中
- 类型智能映射:自动将数据库字段类型映射到 Laravel 类型转换格式
- Carbon 集成:datetime/timestamp 字段自动使用 Carbon 类型
- 迁移状态过滤:支持按状态筛选迁移(已运行/待运行)
- 迁移统计信息:显示迁移统计汇总信息
- 扩展查询宏:支持whereHasIn、orWhereHasIn、whereHasNotIn、random、groupRandom 等宏查询
💡 核心功能示例
智能当前模块检测
系统会自动检测当前代码所在的模块,无需手动传递模块名称:
// 在模块内部的任何地方 $moduleName = module_name(); // 自动返回 'Blog' $enabled = module_enabled(); // 检查当前模块是否启用 // 读取模块配置(自动检测当前模块) $name = module_config('common.name', 'hello'); $cache = module_config('settings.cache.enabled', false);
获取模块路径
// 自动检测当前模块 $path = module_path(null, 'Models/Post.php'); $path = module_path('Config/common.php'); // 指定模块名 $path = module_path('Blog', 'Models/Post.php'); // 获取各种类型的路径 $configPath = module_config_path('common.php'); $routePath = module_routes_path('web.php'); $migrationPath = module_migrations_path(); $modelsPath = module_models_path(); $controllersPath = module_controllers_path('Web'); $viewsPath = module_views_path();
返回模块视图
// 自动检测当前模块 return module_view('post.index', compact('posts')); // 指定模块名 return module_view('Blog', 'post.index', ['posts' => $posts]);
生成路由 URL
// 自动检测当前模块 $url = module_route('posts.index'); $url = module_route('posts.show', ['id' => 1]); // 指定模块名 $url = module_route('Blog', 'posts.index');
🎯 配置示例
详细配置说明请参考 配置详解。
🔧 核心特性
1. 智能当前模块检测
系统提供 module_name() 函数,可以自动检测当前代码所在的模块:
class PostController extends Controller { public function index() { $moduleName = module_name(); // 自动返回 'Blog' $path = module_path(); // 自动获取 Blog 模块的路径 $config = module_config('common.name'); // 自动读取 Blog 模块的配置 // 所有函数都无需传递任何参数 } }
2. 增强的配置读取
module_config() 函数支持两种使用方式:
方式 1:指定模块名称(传统方式)
$value = module_config('common.name', 'default', 'Blog');
方式 2:使用当前模块(智能方式)⭐ 推荐
// 读取 Config/common.php 的 name 配置 $value = module_config('common.name', 'hello'); // 读取嵌套配置 $enabled = module_config('settings.cache.enabled', false); // 无需传递模块名,自动检测
3. 完整的路径助手函数
// 模块路径 module_path('Models'); // 当前模块的 Models 目录 module_path('Blog', 'Models'); // Blog 模块的 Models 目录 // 配置文件路径 module_config_path('common.php'); // 当前模块的 Config/common.php // 路由文件路径 module_routes_path('web'); // 当前模块的 Routes/web.php // 迁移目录路径 module_migrations_path(); // 当前模块的 Database/Migrations // 模型目录路径 module_models_path(); // 当前模块的 Models // 控制器目录路径 module_controllers_path('Web'); // 当前模块的 Http/Controllers/Web // 视图目录路径 module_views_path(); // 当前模块的 Resources/views // 资源目录路径 module_resources_path('assets'); // 当前模块的 Resources/assets // 语言目录路径 module_lang_path(); // 当前模块的 Resources/lang
4. 命令自动注册
模块中的命令会自动发现并注册到 Laravel Console Application:
自动注册,无需手动配置 可以直接运行:php artisan blog:command
📝 Helper 函数
模块系统提供了 40+ 个助手函数,大大简化模块操作。大部分函数支持无参调用,会自动检测当前所在模块。
核心函数
// 获取当前模块名称(精确检测,不使用缓存) $moduleName = module_name(); // 'Blog' // 智能配置读取(推荐) $name = module_config('common.name', 'hello'); $cache = module_config('settings.cache.enabled', false); // 检查模块状态 if (module_enabled()) { // 模块已启用 } // 获取模块路径 $path = module_path(null, 'Models/Post.php'); // 返回模块视图 return module_view(null, 'post.index', compact('posts')); // 生成模块路由 URL $url = module_route('posts.index', ['id' => 1]); // 检查视图是否存在 if (module_has_view('post.index')) { // 视图存在 }
路径相关函数
module_path(); // 模块根路径 module_config_path(); // 配置文件路径 module_routes_path(); // 路由文件路径 module_migrations_path(); // 迁移文件路径 module_models_path(); // 模型路径 module_controllers_path(); // 控制器路径 module_views_path(); // 视图路径 module_resources_path(); // 资源路径 module_lang_path(); // 语言文件路径
视图相关函数
module_view(); // 返回模块视图 module_has_view(); // 检查视图是否存在
路由相关函数
module_route(); // 生成模块路由 URL module_has_route(); // 检查路由是否存在
更多 Helper 函数请参考 Helper 函数详解。
🛠️ 开发工具
代码生成命令
# 创建模块 php artisan module:make Blog # 创建控制器 php artisan module:make-controller Blog PostController php artisan module:make-controller Blog PostController --web php artisan module:make-controller Blog PostController --api # 创建模型 php artisan module:make-model Blog Post # 创建请求验证 php artisan module:make-request Blog PostRequest # 创建迁移 php artisan module:make-migration Blog create_posts_table php artisan module:make-migration Blog create_posts_table --create=posts # 创建事件和监听器 php artisan module:make-event Blog PostCreated php artisan module:make-listener Blog PostCreatedListener --event=PostCreated # 创建中间件 php artisan module:make-middleware Blog CheckPostStatus # 创建服务提供者 php artisan module:make-provider Blog CustomProvider # 创建命令 php artisan module:make-command Blog TestCommand --command=blog:test # 创建数据填充器 php artisan module:make-seeder Blog PostSeeder # 创建策略 php artisan module:make-policy Blog PostPolicy # 创建观察者 php artisan module:make-observer Blog PostObserver
模块管理命令
# 列出所有模块 php artisan module:list # 查看模块详细信息 php artisan module:info Blog # 验证模块完整性 php artisan module:validate Blog # 调试命令 php artisan module:debug-commands --module=Blog
迁移管理命令
# 运行迁移 php artisan module:migrate php artisan module:migrate Blog # 查看迁移状态 php artisan module:migrate-status # 回滚迁移 php artisan module:migrate:reset Blog # 刷新迁移 php artisan module:migrate:refresh Blog
🤝 贡献
欢迎提交 Issue 和 Pull Request。
在提交 PR 之前,请确保:
- 代码遵循 PSR-12 编码标准
- 所有函数都有完整的中文注释
- 添加相应的测试用例
- 更新相关文档
📄 许可证
MIT License
🔗 相关链接
⭐ 支持
如果这个项目对你有帮助,请给它一个 star ⭐
zxf/modules 适用场景与选型建议
zxf/modules 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 31 次下载、GitHub Stars 达 1, 最近一次更新时间为 2026 年 01 月 16 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「package」 「module」 「modules」 「laravel」 「modular」 「zxf」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 zxf/modules 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 zxf/modules 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 zxf/modules 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
This is Paymorrow module for OXID eShop.
Analysis module for finding problematical shop data.
yii2 swiper slider
An interactive tour through the TYPO3 backend.
Simple ASCII output of array data
统计信息
- 总下载量: 31
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 1
- 点击次数: 13
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2026-01-16