Symfony路由配置主要有YAML文件集中管理和@Route注解两种方式:YAML适合中大型项目,结构清晰、易调试;注解适合快速迭代,所见即所得。

Symfony 路由配置主要有两种主流方式:YAML 文件集中管理,和控制器内使用 @Route 注解。选哪种取决于你想要的结构清晰度和开发效率——YAML 适合统一维护,注解更适合快速迭代、逻辑紧耦合的模块。
用 YAML 配置路由(推荐用于中大型项目)
所有路由规则写在 config/routes.yaml 中,结构清晰、易调试、不依赖控制器代码。
- 确保文件存在,路径为
config/routes.yaml;若无,可手动创建 - 按键值对定义路由条目,每个条目包含名称、路径和控制器方法,例如:
users_list:
path: /users
controller: App\Controller\UserController::list
methods: [GET]
-
methods可选,限制请求类型;不填则默认接受所有方法 - 支持嵌套路由前缀,比如在
config/routes/admin.yaml中写:
admin_controllers:
resource: ../../src/Controller/Admin/
type: annotation
prefix: /admin
用 @Route 注解配置(开发最常用)
直接在控制器方法上方添加注解,所见即所得,适合快速验证或功能模块独立开发。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 先安装注解支持:
composer require annotations - 在控制器方法上写注解,注意导入命名空间:
use Symfony\Component\Routing\Annotation\Route; - 基本写法示例:
/**
* @Route("/blog/{slug}", name="blog_show")
*/
public function show($slug) { ... }
- 清除缓存后注解才生效:
php bin/console cache:clear
动态参数与安全约束
URL 中的变量部分用 {param} 表示,但光放占位符不够,还需控制格式和默认行为。
- 设置默认值:在方法参数里给默认值,同时路径中该参数需设为可选(加
?)
/**
* @Route("/blog/{page?}", name="blog_list")
*/
public function list($page = 1) { ... }
- 加正则约束防非法输入,比如只允许数字 ID:
/**
* @Route("/post/{id}", requirements={"id"="\d+"})
*/
public function postShow($id) { ... }
多域名主机路由(进阶场景)
当应用要响应多个域名(如 shop.example.com 和 admin.example.com),不能靠硬编码 host,得用动态匹配。
- 在路由注解或 YAML 中加上
host选项,并用正则匹配多个域名:
/**
* @Route("/", host="{domain}", requirements={"domain"="(?:shop|admin)\.example\.com"})
*/
public function homepage() { ... }
- 配合环境变量或请求监听器,还能把当前 host 自动注入到路由参数中,方便生成跨域名链接


















