一个为 Hyperf 框架打造的智能路由组件,支持 RESTful 规范自动路径生成、资源子操作映射、智能参数识别等高级特性。
- 🚀 RESTful 自动映射 - 根据控制器和方法名自动生成符合 RESTful 规范的路径
- 🎯 智能参数识别 - 自动识别方法参数生成动态路径
- 🔒 注解驱动安全 - 只有明确注解的方法才能对外访问
- ⚡ 高性能设计 - 多层缓存、懒加载、O(1) 查找
- 🎨 零配置使用 - 开箱即用,但支持完全自定义
- 🔧 灵活扩展 - 支持自定义映射规则和路径模板
composer require hyperf-plus/route<?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}
}#[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
}#[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}
}#[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}
}| 方法名 | 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 | 获取历史 |
控制器注解,标记一个类为 API 控制器。
#[ApiController(
prefix: '/api/v1/users', // 可选:路由前缀,不设置则自动生成
tag: 'User Management', // 可选:API 标签
description: '用户管理', // 可选:API 描述
security: true // 可选:是否需要认证
)]方法注解,定义 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 // 请求体
) {}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();namespace App\Controller\Api\V2;
#[ApiController] // 自动生成 /api/v2/users
class UserController
{
#[GetApi]
public function index() {} // GET /api/v2/users
}#[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' => [
// 需要映射的类
],
],
];use HPlus\Validate\Annotations\RequestValidation;
#[GetApi]
#[RequestValidation(rules: [
'page' => 'integer|min:1',
'size' => 'integer|max:100'
])]
public function index() {}路由组件会自动被 Swagger 组件识别,生成 API 文档。
-
命名约定
- 控制器:单数名词 + Controller(如
UserController) - RESTful 方法:使用标准名称(index, show, create, update, delete)
- 扩展方法:使用描述性名称(search, export, batch)
- 控制器:单数名词 + Controller(如
-
路径设计
- 优先使用自动生成,保持一致性
- 复杂场景才手动指定路径
- 遵循 RESTful 设计原则
-
安全考虑
- 默认所有方法都需要路由注解才能访问
- 敏感操作添加
security: true - 合理使用中间件
-
路由未生成
- 检查是否添加了路由注解
- 确认控制器有
@ApiController注解 - 验证注解是否正确导入
-
路径不符合预期
- 查看路由统计了解生成规则
- 使用
path参数自定义路径 - 检查方法名是否符合映射规则
MIT License
欢迎提交 Issue 和 Pull Request!