kingbes / attribute
Webman plugin kingbes/attribute
v1.0.4
2026-08-13 08:24 UTC
Requires
- php: >8.0
README
🚀 基于 webman 的 PHP 8 原生 Attribute(注解)路由方案,通过注解声明路由、中间件、权限标识、视图标识等信息。
环境要求
- PHP >= 8.0
- webman 框架
安装
composer require kingbes/attribute
快速开始
在控制器类或方法上添加 #[Annotation(...)] 注解,数组键值使用 => 语法。
use Kingbes\Attribute\Annotation; #[Annotation([ "title" => "首页控制器", ])] class IndexController { #[Annotation([ "title" => "首页", "path" => ["/index", "/", "/home"], "request" => ["get", "post"], "auth" => true, ])] public function index(Request $request) { return json(['code' => 0, 'msg' => 'ok']); } }
注解参数
#[Annotation(array $data)] 支持以下键:
| 键 | 类型 | 必须 | 说明 |
|---|---|---|---|
title |
string | 否 | 标题标识,用于权限/视图等场景 |
path |
string[] | 否 | 自定义路由路径。为空时自动使用类名 + 方法名生成路由 |
request |
string[] | 否 | 允许的 HTTP 方法,见下方默认值 |
middleware |
string[] | 否 | 路由中间件,默认 [] |
auth |
bool | 否 | 权限标识 |
name |
string | 否 | 自定义路由名(webman ->name()),可覆盖默认名 |
默认值
request默认:['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS']middleware默认:[]path默认:[],为空时自动取类名下划线/方法名下划线作为路由name默认:应用.控制器.方法
自定义路由名
name 用于设置 webman 路由名(->name()),可在模板中通过 {:route("路由名")} 反查生成 URL,无需手写路径。指定后覆盖该方法的默认路由名:
#[Annotation([
"name" => "other.hello",
])]
public function sayHello()
{
// 模板中可用 {:route("other.hello")} 生成该方法的 URL
}
可重复注解
同一目标(类或方法)可声明多个 #[Annotation],重复注解会合并:
- 标量键(如
title)后者覆盖前者; path数组会追加合并。
#[Annotation(["path" => ["/a"]])] #[Annotation(["path" => ["/b"]])] public function index() { // 同时注册 /a 与 /b 两个路由 }
注解信息
通过 Data 类获取全部注解信息:
use Kingbes\Attribute\Data; Data::$data // 按 app / plugin 层级分组的全部注解
路由规则
- 应用路由:
/{控制器名下划线}/{方法名下划线} - 插件路由:
/plugin/{作者}/{应用}/{控制器名下划线}/{方法名下划线} - 使用本插件后默认路由会被禁用,所有路由均需通过注解声明。
index 路由别名
index 方法除完整路径外,会自动注册一个去掉末尾连续 index 段的别名路径:
| 控制器 | 完整路径 | 别名路径 |
|---|---|---|
IndexController::index(单应用根) |
/index/index |
/ |
默认 index 应用 IndexController::index |
/index/index/index |
/ |
admin 应用 IndexController::index |
/admin/index/index |
/admin |
AboutController::index |
/about/index |
/about |
user 应用 AboutController::index |
/user/about/index |
/user/about |
规则:从完整路径末尾依次去掉 /index 段,直到不剩或剩余非 index 段。如 /admin/index/index → /admin,/index/index/index → /。如需自定义别名行为,可在 index 方法上用 path 显式指定。
测试
在 webman 项目中用 route:list 命令查看注解生成的路由:
php webman route:list
启动服务后逐个访问验证:
php windows.php
检查点:
- 默认路由(
/{控制器名下划线}/{方法名下划线}) index别名路由(去掉末尾/index)- 自定义
path与自定义路由名name
限制
- 控制器文件需位于
app/**/controller或plugin/**/app/**/controller目录下,否则不会被扫描。 - 注解数组键值必须使用 PHP 数组语法
=>,不能使用:。 - 仅扫描公共方法,
__construct、__destruct会被忽略。