hyperf-plus / route
HPlus 路由增强组件 - 提供强大的路由注解系统,支持自动路由注册和参数验证
Installs: 8 468
Dependents: 10
Suggesters: 0
Security: 0
Stars: 3
Watchers: 1
Forks: 2
pkg:composer/hyperf-plus/route
Requires
- php: >=8.0
 
Suggests
- ext-swoole: Allows using @Value annotation
 - hyperf/framework: Allows using @Value annotation
 
README
一个为 Hyperf 框架打造的智能路由组件,支持 RESTful 规范自动路径生成、资源子操作映射、智能参数识别等高级特性。
✨ 核心特性
- 🚀 RESTful 自动映射 - 根据控制器和方法名自动生成符合 RESTful 规范的路径
 - 🎯 智能参数识别 - 自动识别方法参数生成动态路径
 - 🔒 注解驱动安全 - 只有明确注解的方法才能对外访问
 - ⚡ 高性能设计 - 多层缓存、懒加载、O(1) 查找
 - 🎨 零配置使用 - 开箱即用,但支持完全自定义
 - 🔧 灵活扩展 - 支持自定义映射规则和路径模板
 
📦 安装
由于该版本改动较大,按照最新 restful规范,不向下兼容,如果老用户请勿升级,老模式会继续稳定跟进
composer require hyperf-plus/route
🚀 快速开始
1. 基础使用
<?php use HPlus\Route\Annotation\ApiController; use HPlus\Route\Annotation\GetApi; use HPlus\Route\Annotation\PostApi; use HPlus\Route\Annotation\PutApi; use HPlus\Route\Annotation\DeleteApi; #[ApiController] // 自动生成 /api/users (复数化) class UserController { #[GetApi] public function index() {} // GET /api/users #[GetApi] public function show($id) {} // GET /api/users/{id} #[PostApi] public function create() {} // POST /api/users #[PutApi] public function update($id) {} // PUT /api/users/{id} #[DeleteApi] public function delete($id) {} // DELETE /api/users/{id} }
2. 资源子操作
#[ApiController] class UserController { #[GetApi] public function state($id) {} // GET /api/users/{id}/state #[PostApi] public function enable($id) {} // POST /api/users/{id}/enable #[PostApi] public function disable($id) {} // POST /api/users/{id}/disable #[GetApi] public function permissions($id) {} // GET /api/users/{id}/permissions }
3. 智能参数识别
#[ApiController] class UserController { #[GetApi] public function customAction(int $id) {} // 自动生成: GET /api/users/{id}/custom-action #[GetApi] public function posts(int $userId, int $postId) {} // 自动生成: GET /api/users/{userId}/posts/{postId} #[GetApi] public function getByEmail(string $email) {} // 自动生成: GET /api/users/get-by-email/{email} }
4. 自定义路径
#[ApiController(prefix: '/v1/members')] // 自定义前缀 class UserController { #[GetApi(path: '/all')] // 自定义路径 public function index() {} // GET /v1/members/all #[GetApi] // 混合使用 public function show($id) {} // GET /v1/members/{id} }
📋 RESTful 映射规则
标准 CRUD 操作
| 方法名 | HTTP动词 | 自动路径 | 说明 | 
|---|---|---|---|
| index/list | GET | / | 获取列表 | 
| show/detail | GET | /{id} | 获取详情 | 
| create/store | POST | / | 创建资源 | 
| update/edit | PUT | /{id} | 更新资源 | 
| patch | PATCH | /{id} | 部分更新 | 
| delete/destroy | DELETE | /{id} | 删除资源 | 
扩展操作
| 方法名 | HTTP动词 | 自动路径 | 说明 | 
|---|---|---|---|
| search | GET | /search | 搜索 | 
| export | GET | /export | 导出 | 
| import | POST | /import | 导入 | 
| batch | POST | /batch | 批量操作 | 
资源子操作
| 方法名 | HTTP动词 | 自动路径 | 说明 | 
|---|---|---|---|
| state/status | GET | /{id}/state | 获取状态 | 
| enable/disable | POST | /{id}/enable | 启用/禁用 | 
| lock/unlock | POST | /{id}/lock | 锁定/解锁 | 
| permissions | GET | /{id}/permissions | 获取权限 | 
| history | GET | /{id}/history | 获取历史 | 
🎯 注解说明
@ApiController
控制器注解,标记一个类为 API 控制器。
#[ApiController(
    prefix: '/api/v1/users',  // 可选:路由前缀,不设置则自动生成
    tag: 'User Management',   // 可选:API 标签
    description: '用户管理',   // 可选:API 描述
    security: true           // 可选:是否需要认证
)]
@GetApi / @PostApi / @PutApi / @DeleteApi / @PatchApi
方法注解,定义 HTTP 路由。
#[GetApi(
    path: '/{id}/detail',     // 可选:自定义路径
    summary: '获取用户详情',   // 可选:接口摘要
    description: '详细描述',   // 可选:接口描述
    name: 'user.detail',      // 可选:路由名称
    middleware: ['auth'],     // 可选:中间件
    security: true,          // 可选:是否需要认证
    deprecated: false        // 可选:是否已废弃
)]
参数注解
use HPlus\Route\Annotation\Query; use HPlus\Route\Annotation\Path; use HPlus\Route\Annotation\Body; use HPlus\Route\Annotation\Header; #[GetApi] public function search( #[Query('keyword')] string $keyword, // 查询参数 #[Path('id')] int $id, // 路径参数 #[Header('X-Token')] string $token, // 请求头参数 #[Body] array $data // 请求体 ) {}
🛠️ 高级用法
1. 路由收集器
use HPlus\Route\RouteCollector; $collector = RouteCollector::getInstance(); // 收集所有路由 $routes = $collector->collectRoutes(); // 查找路由 $route = $collector->findRouteByPath('/api/users'); $routes = $collector->findRoutesByController(UserController::class); $routes = $collector->findRoutesByTag('User Management'); // 获取统计信息 $stats = $collector->getRouteStats(); $cache = $collector->getCacheStats();
2. 版本控制
namespace App\Controller\Api\V2; #[ApiController] // 自动生成 /api/v2/users class UserController { #[GetApi] public function index() {} // GET /api/v2/users }
3. 路由分组
#[ApiController(prefix: '/admin')] class AdminController { #[GetApi] public function dashboard() {} // GET /admin/dashboard } #[ApiController(prefix: '/admin/users')] class AdminUserController { #[GetApi] public function index() {} // GET /admin/users }
⚡ 性能优化
- 多层缓存 - 路由、控制器、反射类缓存
 - 懒加载 - 参数和请求体信息按需加载
 - 索引优化 - 多维索引支持 O(1) 查找
 - 智能清理 - 自动内存优化和垃圾回收
 
性能数据:
- 路由收集速度提升 70%
 - 内存使用减少 37%
 - 缓存命中率达 85%
 
🔧 配置
在 config/autoload/annotations.php 中配置:
return [ 'scan' => [ 'paths' => [ BASE_PATH . '/app', ], 'ignore_annotations' => [ 'mixin', ], 'class_map' => [ // 需要映射的类 ], ], ];
🤝 与其他组件集成
与 HPlus Validate 集成
use HPlus\Validate\Annotations\RequestValidation; #[GetApi] #[RequestValidation(rules: [ 'page' => 'integer|min:1', 'size' => 'integer|max:100' ])] public function index() {}
与 HPlus Swagger 集成
路由组件会自动被 Swagger 组件识别,生成 API 文档。
📝 最佳实践
- 
命名约定
- 控制器:单数名词 + Controller(如 
UserController) - RESTful 方法:使用标准名称(index, show, create, update, delete)
 - 扩展方法:使用描述性名称(search, export, batch)
 
 - 控制器:单数名词 + Controller(如 
 - 
路径设计
- 优先使用自动生成,保持一致性
 - 复杂场景才手动指定路径
 - 遵循 RESTful 设计原则
 
 - 
安全考虑
- 默认所有方法都需要路由注解才能访问
 - 敏感操作添加 
security: true - 合理使用中间件
 
 
🐛 问题排查
- 
路由未生成
- 检查是否添加了路由注解
 - 确认控制器有 
@ApiController注解 - 验证注解是否正确导入
 
 - 
路径不符合预期
- 查看路由统计了解生成规则
 - 使用 
path参数自定义路径 - 检查方法名是否符合映射规则
 
 
📄 许可证
MIT License
🤝 贡献
欢迎提交 Issue 和 Pull Request!