注解路由
XinAdmin 实现了控制器注解路由,通过在控制器上添加 PHP Attribute 注解来定义路由、中间件和权限。
工作原理
AnnoRouteService 会扫描所有带有 #[RequestAttribute] 注解的控制器类,解析类级别和方法级别的注解,自动注册对应的路由。
核心组件
控制器类注解
在控制器类上使用 #[RequestAttribute] 注解:
参数说明:
方法路由注解
在控制器方法上使用路由注解来定义单个路由:
GetRoute - GET 请求
PostRoute - POST 请求
PutRoute - PUT 请求
DeleteRoute - DELETE 请求
路由注解参数说明:
CRUD 注解
CRUD 注解是类级别注解,使用时会自动在控制器中查找 $service 属性作为仓储类,自动生成对应的路由处理闭包。
定义仓储服务
控制器必须定义 $service 属性:
Query - 查询列表
- HTTP 方法: GET
- 路由地址:
/ - 默认权限:
query - 仓储方法:
query($request->query())
Find - 查询单个
- HTTP 方法: GET
- 路由地址:
/{id} - 默认权限:
find - 路由约束:
id必须为数字 - 仓储方法:
find($id)
Create - 新增
- HTTP 方法: POST
- 路由地址:
/ - 默认权限:
create - 仓储方法:
create($request->all())
Update - 更新
- HTTP 方法: PUT
- 路由地址:
/{id} - 默认权限:
update - 路由约束:
id必须为数字 - 仓储方法:
update($id, $request->all())
Delete - 删除
- HTTP 方法: DELETE
- 路由地址:
/{id} - 默认权限:
delete - 路由约束:
id必须为数字 - 仓储方法:
delete($id)
完整示例
示例一:使用 CRUD 注解
生成的路由:
生成的路由:
示例二:无需权限控制的公开接口
authorize 参数说明:
路由注解公共属性
所有路由注解都继承自 BaseAttribute,包含以下公共属性:
中间件组合
中间件可以全局设置(类级别)、局部设置(方法级别),最终会合并:
权限能力组合
权限能力由 abilitiesPrefix 和 authorize 拼接而成: