Symfony 2.3.40 中路由参数配置需用 @Route 注解或 routing.yml,通过 pattern(YAML)或路径占位符(注解)声明变量,配合 defaults 设默认值、requirements 加正则约束,且注解需启用 SensioFrameworkExtraBundle,YAML 不支持 methods 键。

在 Symfony 2.3.40 中配置路由参数,核心是通过 注解(Annotations) 或 YAML 配置文件 定义 URL 占位符,并配合 defaults 和 requirements 控制其行为。这个版本不支持 PHP Attributes(那是 Symfony 5+ 的特性),必须使用 SensioFrameworkExtraBundle 提供的 @Route 注解或 routing.yml 格式。
用注解定义带参数的路由
在控制器方法上方添加 @Route,路径中用花括号声明变量,如 {id} 或 {slug}。框架会自动把匹配到的值作为参数传入方法:
-
@Route("/user/{id}")→ 方法签名写public function showAction($id) - 支持多个参数:
@Route("/blog/{category}/{id}")→ 对应showAction($category, $id) - 必须启用注解路由:确认
app/config/config.yml含annotations: true,且app/config/routing.yml包含加载控制器注解的配置,例如:controllers:<br> resource: "@YourBundle/Controller/"<br> type: annotation
设置默认值和可选参数
URL 参数不是总要显式出现,可通过 defaults 设默认值,让路径更灵活:
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
-
@Route("/page/{num}", defaults={"num": 1})→ 访问/page时$num自动为1 - 若想让整个段可选(如
/blog和/blog/2都匹配),需写成@Route("/blog/{num?}", defaults={"num": 1}),同时方法参数也要设默认值:showAction($num = 1) - 注意:只设
defaults不加?,路径仍要求该段存在;只加?不设defaults,方法参数没默认值会报错
用 requirements 限制参数格式
防止非法输入或路由误匹配,必须对动态参数加正则约束:
-
@Route("/user/{id}", requirements={"id": "d+"})→ 只接受纯数字,/user/abc直接返回 404 -
@Route("/post/{slug}", requirements={"slug": "[a-z0-9-_]+"})→ 限定小写字母、数字、短横线和下划线 - 正则必须用双引号包裹,反斜杠要写成
\d+或用单引号避免转义问题;d+比[0-9]+更安全,能排除 Unicode 数字干扰
在 YAML 中配置等效路由
如果不用注解,可在 app/config/routing.yml 或独立文件里写:
- 每条路由必须有
pattern(2.3.x 用此键,非path)、defaults、requirements和controller - 示例:
user_show:<br> pattern: /user/{id}<br> defaults: { _controller: YourBundle:User:show, id: 1 }<br> requirements: { id: d+ } - 注意:2.3.40 的 YAML 路由不支持
methods键,需靠condition或在控制器内判断请求方法


















