symfony注解路由是主流推荐方式,需启用annotations支持;用@route声明路径、方法、约束与默认值,参数自动注入,修改后须清缓存并用debug:router等命令调试。

Symfony 注解路由(Annotation Routing)是主流且推荐的路由定义方式,写法直观、与控制器逻辑紧耦合,适合快速开发和模块化维护。从 Symfony 5.4 起,注解路由已深度集成,无需额外安装 SensioFrameworkExtraBundle,只需启用 annotations 支持即可。
基础写法:@Route 注解声明路径与名称
在控制器方法上方使用 @Route 注解,指定 URL 路径和路由名称:
-
@Route("/about", name="app_about")→ 匹配GET /about,并命名为app_about - 路径中可含动态参数:
@Route("/blog/{slug}", name="blog_show"),对应方法签名public function show($slug) - 多个参数直接并列:
@Route("/product/{category}/{id}")→ 方法接收$category和$id
限制请求方法与协议
避免误用或安全风险,可显式限定 HTTP 方法和访问协议:
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
-
@Route("/admin", methods={"GET", "POST"})→ 仅允许 GET/POST -
@Route("/api/data", schemes={"https"})→ 强制 HTTPS - PHP 8+ 属性语法(更现代):
#[Route('/login', methods: ['GET'], schemes: ['https'])]
参数约束与默认值
确保参数格式合法、支持可选路径,靠 requirements 和 defaults 控制:
-
@Route("/post/{id}", requirements={"id": "\d+"})→/post/abc直接 404 -
@Route("/page/{num}", defaults={"num": 1})→ 访问/page等价于/page/1 - 组合使用:
@Route("/user/{username}", requirements={"username": "[a-z0-9_]+"}, defaults={"username": "guest"})
前缀与嵌套路由管理
批量添加统一路径前缀,提升组织性,避免每个路由重复书写:
- 在
config/routes/annotations.yaml中配置: controllers:<br> resource: ../../src/Controller/<br> type: annotation<br> prefix: /api
- 此后所有
@Route("/users")自动变为/api/users
调试与验证必须做
改完路由后不调试,容易出现 404 或匹配错乱:
-
php bin/console debug:router→ 查看全部注册路由 -
php bin/console debug:router app_about→ 查看某条路由详情 -
php bin/console router:match /blog/test-123→ 模拟匹配,确认哪条路由响应 - 修改后务必清缓存:
php bin/console cache:clear(开发环境也建议执行)










