delaynomore/thinkphp-mac-parser
Composer 安装命令:
composer require delaynomore/thinkphp-mac-parser
包简介
URL解析工具,支持模块、控制器、方法的解析
README 文档
README
ThinkPHP MAC Parser
ThinkPHP MAC (Module-Action-Controller) 解析器,提供增强的URL解析功能,支持模块、控制器、方法的解析。
📋 项目起因
ThinkPHP (5.0+) 框架内部没有提供从外部URL字符串解析出模块名、控制器和方法的功能。框架的路由绑定类中的模块绑定是通过静态属性实现的,全局生效,仅能解析当前请求路由到的控制器/模块/方法。
对于一些外部参数传入的URL地址(例如跳转URL的判断和分析、URL的鉴权等场景),无法通过简单的方法解析出模块、控制器和方法。本库就是为了解决这一问题而创建的,提供独立的URL解析功能,不依赖ThinkPHP框架的路由绑定机制。
📑 目录
✨ 功能特点
- 解析URL获取模块、控制器、方法
- 支持域名绑定模块(支持多种匹配模式)
- 支持多级控制器解析
- 灵活的命名转换规则
- 支持特殊域名后缀处理
📦 安装
通过 Composer 安装:
composer require delaynomore/thinkphp-mac-parser
🚀 快速开始
基本用法
<?php use DelayNomore\ThinkMac\Parser; // 解析完整URL $result = Parser::parseMac('https://example.com/admin/user/view'); // 输出结果 var_dump($result);
自定义配置选项
<?php use DelayNomore\ThinkMac\Parser; $options = [ 'default_module' => 'home', 'default_controller' => 'index', 'default_action' => 'index', 'convert' => true, 'bind_domains' => [ 'admin.example.com' => 'admin', 'api.*' => 'api' ] ]; $result = Parser::parseMac('https://api.example.com/user/list', $options);
📝 主要方法
parseMac(string $url, array $options = []): array
解析完整URL获取模块、控制器、方法。
参数:
$url: URL地址$options: 选项数组bind_module: 绑定模块,设置后bind_files和bind_domains无效bind_domains: 绑定域名,格式为 ['domain' => 'module'],优先级高于bind_filesbind_files: 绑定文件,格式为 ['fileName' => 'module'],优先级低于bind_domainsdefault_module: 默认模块default_controller: 默认控制器default_action: 默认操作方法domain_root: 根域名,用于处理特殊后缀,例如 'thinkphp.com.cn'convert: 是否开启URL中控制器和操作名的自动转换
parseDomain(string $url, array $rules = [], ?string $domainRoot = null): array
解析域名并提取模块名
parseController(string $url, array $options = []): array
解析控制器路径和操作方法
📋 返回结果说明
parseMac() 方法返回包含以下键的数组:
module: 模块名controller: 控制器名称(兼容旧版,等同于ctrl)action: 操作名(兼容旧版,等同于action)ctrl: 控制器名称,小写+下划线格式class: 控制器类名,大驼峰格式method: 操作方法名,小驼峰格式dir: 控制器子目录,多级控制器的目录部分,小写+下划线格式path: 控制器路径(不含模块),小写+下划线格式fullpath: 完整路径,包含模块/控制器/操作,如"module/dir/controller/action"url: URL格式路径,如"module/controller/action"或"module/dir.controller/action"nested: 是否为多级控制器depth: 控制器层级数量
📊 实际解析示例
以下是几个不同URL的实际解析结果:
基本URL解析
$result = Parser::parseMac('https://example.com/admin/user/view');
返回结果:
{
"module": "admin",
"ctrl": "user",
"action": "view",
"class": "User",
"method": "view",
"dir": "",
"path": "user",
"nested": false,
"depth": 1,
"controller": "user",
"fullpath": "admin/user/view",
"url": "admin/user/view"
}
多级控制器解析
$result = Parser::parseMac('https://example.com/admin/user/manage/edit');
返回结果:
{
"module": "admin",
"ctrl": "edit",
"action": "index",
"class": "Edit",
"method": "index",
"dir": "user/manage",
"path": "user/manage/edit",
"nested": true,
"depth": 3,
"controller": "edit",
"fullpath": "admin/user/manage/edit/index",
"url": "admin/user.manage.edit/index"
}
域名绑定模块解析
$options = [ 'bind_domains' => ['api.example.com' => 'api'] ]; $result = Parser::parseMac('https://api.example.com/v1/users', $options);
返回结果:
{
"module": "api",
"ctrl": "users",
"action": "index",
"class": "Users",
"method": "index",
"dir": "v1",
"path": "v1/users",
"nested": true,
"depth": 2,
"controller": "users",
"fullpath": "api/v1/users/index",
"url": "api/v1.users/index"
}
📚 示例
可以查看 examples 目录下的示例文件,了解更多使用方法:
demo.php: 基本演示url_parse_example.php: URL解析示例controller_parse_example.php: 控制器解析示例domain_parse_example.php: 域名解析示例
也可以直接使用内置的示例类:
use DelayNomore\ThinkMac\example\Example; Example::demoParseUrl(); Example::demoParseDomain(); Example::demoParseController();
❓ 常见问题(FAQ)
1. 如何处理多级控制器?
解析器默认支持多级控制器,例如 admin/user/manage/edit 将被解析为模块 admin,控制器路径 user/manage/edit。您可以通过返回结果中的 dir、ctrl 和 path 字段来获取详细信息。
2. 这个库与ThinkPHP框架的关系是什么?
本库是独立于ThinkPHP框架的,专门用于解析URL字符串,提取出模块、控制器和方法。它解决了ThinkPHP框架中无法直接解析外部URL的限制,特别适用于需要分析外部传入URL的场景,如跳转URL的判断和URL鉴权等。
3. 支持哪些版本的PHP?
本库要求PHP 7.2.0及以上版本。
4. 如何处理特殊的域名后缀?
您可以通过 domain_root 选项指定根域名,例如:
$options = [ 'domain_root' => 'example.com.cn', 'bind_domains' => ['admin' => 'admin'] ]; $result = Parser::parseMac('https://admin.example.com.cn/user/list', $options);
5. 解析器的性能如何?
本解析器经过性能优化,在处理大量URL请求时表现良好。在标准测试环境中,每秒可处理数万次解析请求,对应用性能影响极小。
🤝 贡献
我们欢迎并感谢任何形式的贡献!如果您想为项目做出贡献,请查看 贡献指南 了解详细步骤。
参与本项目即表示您同意遵守我们的 行为准则。
参与方式
- 提交 Bug 报告
- 提出新功能建议
- 改进文档
- 提交代码修复或新功能
开发环境设置
# 克隆仓库 git clone https://github.com/delay-no-more/thinkphp-mac-parser.git # 安装依赖 composer install # 运行测试 ./vendor/bin/phpunit
📄 许可证
MIT
最后更新: 2025-06-01
delaynomore/thinkphp-mac-parser 适用场景与选型建议
delaynomore/thinkphp-mac-parser 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 4 次下载、GitHub Stars 达 0, 最近一次更新时间为 2025 年 06 月 01 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「parser」 「module」 「url」 「controller」 「action」 「thinkphp」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 delaynomore/thinkphp-mac-parser 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 delaynomore/thinkphp-mac-parser 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 delaynomore/thinkphp-mac-parser 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Easy to use SDK with grabber for multiple platforms at once like YouTube, Dailymotion, Facebook and more.
Easy URL rewrites in your Laravel application
An MT940 bank statement parser for PHP
A Laravel helper to detect if the current route/path is active.
Laravel integration for the jsonapi.org parser
Provides a service and twig extension for getting short urls like http://your.host/~short
统计信息
- 总下载量: 4
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 9
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2025-06-01
