{"id":15296455,"url":"https://github.com/sunsgneayo/annotation","last_synced_at":"2025-09-02T08:41:29.593Z","repository":{"id":41560716,"uuid":"494484926","full_name":"sunsgneayo/annotation","owner":"sunsgneayo","description":"🚀 🔥 🌈 基于webman使用 doctrine/annotations 包实现的注解路由，中间件解决方案","archived":false,"fork":false,"pushed_at":"2024-06-13T07:54:24.000Z","size":36,"stargazers_count":19,"open_issues_count":1,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-08-23T06:58:59.368Z","etag":null,"topics":["middleware","php8","psr-15","router","webman","workerman"],"latest_commit_sha":null,"homepage":"https://www.workerman.net/plugin/52","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sunsgneayo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-05-20T13:56:12.000Z","updated_at":"2024-10-22T00:43:27.000Z","dependencies_parsed_at":"2023-11-21T10:32:26.118Z","dependency_job_id":"f3bfb4fc-111a-41f9-9304-0f668b7a1b6d","html_url":"https://github.com/sunsgneayo/annotation","commit_stats":{"total_commits":32,"total_committers":3,"mean_commits":"10.666666666666666","dds":0.5625,"last_synced_commit":"edb154f2129b7f78e74c2e52f92d06d6bebe9dc6"},"previous_names":[],"tags_count":15,"template":false,"template_full_name":null,"purl":"pkg:github/sunsgneayo/annotation","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunsgneayo%2Fannotation","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunsgneayo%2Fannotation/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunsgneayo%2Fannotation/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunsgneayo%2Fannotation/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sunsgneayo","download_url":"https://codeload.github.com/sunsgneayo/annotation/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunsgneayo%2Fannotation/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273257517,"owners_count":25073530,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-02T02:00:09.530Z","response_time":77,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["middleware","php8","psr-15","router","webman","workerman"],"created_at":"2024-09-30T18:10:33.790Z","updated_at":"2025-09-02T08:41:29.550Z","avatar_url":"https://github.com/sunsgneayo.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg width=\"260px\" src=\"http://cdn.qx.1zhihe.cn/image/20250829/b4d39e5c59d846d685fa7a7794e8f42a.png\" alt=\"sunsgne\"\u003e\n\u003c/p\u003e\n\n**\u003cp align=\"center\"\u003esunsgne/annotation\u003c/p\u003e**\n\n**\u003cp align=\"center\"\u003e🐬 Webman's shortcut routing based on annotation scheme 🐬\u003c/p\u003e**\n\n\u003cdiv align=\"center\"\u003e\n    \n[![Latest Stable Version](http://poser.pugx.org/sunsgne/annotations/v)](https://packagist.org/packages/sunsgne/annotations)\n[![Total Downloads](http://poser.pugx.org/sunsgne/annotations/downloads)](https://packagist.org/packages/sunsgne/annotations)\n[![Latest Unstable Version](http://poser.pugx.org/sunsgne/annotations/v/unstable)](https://packagist.org/packages/sunsgne/annotations)\n[![License](http://poser.pugx.org/sunsgne/annotations/license)](https://packagist.org/packages/sunsgne/annotations)\n[![PHP Version Require](http://poser.pugx.org/sunsgne/annotations/require/php)](https://packagist.org/packages/sunsgne/annotations)\n    \n\u003c/div\u003e\n\n# webman  annotation 注解路由\n\n\u003e 使用了 `doctrine/annotations` 包来对代码内的注解进行解析。支持`php8注解方式`\n\u003e\n\u003e 您可以直接在控制器类任意方法定义`@RequestMapping`注解来完成一个路由的定义，如需使用路由中间件请定义该路由的注解方法`@Middwares`或`@Middware`\n\u003e 注解并引入中间件命名空间即可 \n\u003e\n\n\n## 更新日志\n\n### 2.0.0 - 2023-11-21\n- 2.0 版本仅支持`php \u003e= 8`\n- 增加`AutoController`，处理路由组等\n```php\n#[AutoController(prefix: '/test')]\n// 在此controller下定义的路由前缀都会为`prefix`参数\n```\n\n\n### 1.1.2 - 2022-07-04\n- 修复注解含有`混杂参数`，导致读取失败的问题\n- 新增配置文件`ignored.php`，用于对注解中的其他参数做忽略读取操作：如`datetime`,`used`等。\n- 对`php8`以上版本做`原生注解`的适配\n\n\n## 安装\n\n```shell\ncomposer require sunsgne/annotations\n```\n## 使用\n\n### 路由控制\n\n- GET\n- POST\n- PUT\n- DELETE\n- HEADER\n- OPTIONS\n~~~php\nuse Sunsgne\\Annotations\\Mapping\\RequestMapping;\n/**\n * 允许通过 GET 或 POST 方式请求\n * @RequestMapping(methods=\"GET , POST\" , path=\"/api/json\")\n * @param Request $request\n * @return Response\n */\npublic function json(Request $request)\n{\n    return json(['code' =\u003e 0, 'msg' =\u003e 'ok']);\n}\n~~~\n\n### 路由中间件\n\n在通过注解定义路由时，您仅可通过注解的方式来定义中间件，对中间件的定义有两个注解，分别为：\n\u003e 使用 `@Middleware` 注解时需 `use  Sunsgne\\Annotations\\Mapping\\Middleware;` 命名空间；\n\n\u003e 使用 `@Middlewares` 注解时需 `use  Sunsgne\\Annotations\\Mapping\\Middlewares;` 命名空间；\n- `@Middleware` 注解为定义单个中间件时使用，在一个地方仅可定义一个该注解，不可重复定义\n- `@Middlewares` 注解为定义多个中间件时使用，在一个地方仅可定义一个该注解，然后通过在该注解内定义多个 `@Middleware` 注解实现多个中间件的定义\n  定义单个中间件：\n~~~php\nuse Sunsgne\\Annotations\\Mapping\\RequestMapping;\nuse Sunsgne\\Annotations\\Mapping\\Middleware;\nuse Sunsgne\\Annotations\\Mapping\\Middlewares;\nuse app\\middleware\\App;\nuse app\\middleware\\Log;\n/**\n * @RequestMapping(methods=\"GET\" , path=\"/api/json\")\n * @Middleware(App::class)\n * @param Request $request\n * @return Response\n */\npublic function json(Request $request)\n{\n    return json(['code' =\u003e 0, 'msg' =\u003e 'ok']);\n}\n~~~\n\n定义多个中间件：\n~~~php\nuse Sunsgne\\Annotations\\Mapping\\RequestMapping;\nuse Sunsgne\\Annotations\\Mapping\\Middleware;\nuse Sunsgne\\Annotations\\Mapping\\Middlewares;\nuse app\\middleware\\App;\nuse app\\middleware\\Log;\n/**\n * @RequestMapping(methods=\"GET\" , path=\"/api/json\")\n * @Middlewares({\n *     @Middleware(App::class),\n *     @Middleware(Log::class)\n * })\n * @param Request $request\n * @return Response\n */\npublic function json(Request $request)\n{\n    return json(['code' =\u003e 0, 'msg' =\u003e 'ok']);\n}\n~~~\n\n### 支持PHP8.0+版本\n\n** **\n*注意请勿直接copy。示例中未创建中间件\n1. 定义路由\n~~~php\nuse Sunsgne\\Annotations\\Mapping\\RequestMapping;\nuse Sunsgne\\Annotations\\Mapping\\Middleware;\nuse Sunsgne\\Annotations\\Mapping\\Middlewares;\nuse app\\middleware\\App;\nuse app\\middleware\\Log;\n#[RequestMapping(methods: \"GET , POST\" , path:\"/api/json\")]\npublic function json(Request $request)\n{\n    return json(['code' =\u003e 0, 'msg' =\u003e 'ok']);\n}\n~~~\n\n2. 定义路由并配置中间件(多个)\n~~~php\nuse Sunsgne\\Annotations\\Mapping\\RequestMapping;\nuse Sunsgne\\Annotations\\Mapping\\Middleware;\nuse Sunsgne\\Annotations\\Mapping\\Middlewares;\nuse app\\middleware\\App;\nuse app\\middleware\\Log;\n#[RequestMapping(methods: \"GET , POST\" , path:\"/api/json\") , Middlewares(App::class , Log::class)]\npublic function json(Request $request)\n{\n    return json(['code' =\u003e 0, 'msg' =\u003e 'ok']);\n}\n~~~\n### 忽略注解参数\n\n请在`config/plugin/sunsgne/annotations/ignored`文件中添加需要忽略的参数\n~~~php\nreturn [\n    \"after\", \"afterClass\", \"backupGlobals\", \"backupStaticAttributes\", \"before\", \"beforeClass\", \"codeCoverageIgnore*\",\n    \"covers\", \"coversDefaultClass\", \"coversNothing\", \"dataProvider\", \"depends\", \"doesNotPerformAssertions\",\n    \"expectedException\", \"expectedExceptionCode\", \"expectedExceptionMessage\", \"expectedExceptionMessageRegExp\", \"group\",\n    \"large\", \"medium\", \"preserveGlobalState\", \"requires\", \"runTestsInSeparateProcesses\", \"runInSeparateProcess\", \"small\",\n    \"test\", \"testdox\", \"testWith\", \"ticket\", \"uses\" , \"datetime\" \n    // ........\n];\n~~~\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsunsgneayo%2Fannotation","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsunsgneayo%2Fannotation","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsunsgneayo%2Fannotation/lists"}