Symfony路由命名是必须项,每个路由需有唯一且语义清晰的name,用于URL生成、重定向和测试;推荐采用“模块.动作”结构,如admin.dashboard、api.v1.product.list,避免动词混搭与技术细节。

Symfony路由命名不是可选项,而是必须项——每个路由都得有唯一、语义清晰的名称,否则无法生成URL、做重定向或写测试。
命名必须带 name 参数
无论用注解、YAML 还是 PHP 方式定义路由,name 属性不可省略。它才是路由的“身份证”,路径(path)只是访问入口,可能变化,但 name 一旦定下就应长期稳定。
- 注解中直接写:
@Route("/user/{id}", name="user.show") - YAML 中显式声明:
user_show: path: /user/{id} controller: App\Controller\UserController::show(注意:YAML 里 name 就是键名user_show) - PHP 配置中用
->setPath()和->setName()分开设置
推荐命名结构:模块.动作
用英文点号(.)分隔层级,不拼接下划线或驼峰,读起来像自然语言路径:
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
-
admin.dashboard—— 后台首页 -
api.v1.product.list—— v1 版本产品列表(API 版本放最前) -
cart.add_item—— 购物车添加商品(非标准 CRUD 用描述性后缀) - 避免
get_user_by_id或userGetById:动词+名词混搭易歧义,且暴露 HTTP 方法
命名要反映业务,不是技术
名称里不出现 get、post、json、ajax、indexAction 这类词。这些属于实现细节,和路由语义无关。
- ✅
order.confirm—— 表达“确认订单”这个用户动作 - ❌
post_order_confirm—— 把请求方法和业务混在一起,后续若改用 GET 也要改名 - ✅
report.export.pdf—— 明确输出格式,是业务需求的一部分 - ❌
report_export_pdf_action—— 冗余、不简洁、带框架痕迹
在代码里真正用起来
命名之后,所有 URL 构建、重定向、测试断言都靠它,而不是硬编码路径:
- 生成链接:
$this->generateUrl('user.show', ['id' => 42]) - 控制器内跳转:
return $this->redirectToRoute('admin.dashboard'); - Twig 模板中:
<a href="{{ path('product.list') }}">全部商品</a> - 命令行查路由:
php bin/console debug:router user.show看是否注册成功


















