Symfony2路由可选参数和格式路径/模式

时间:2013-04-01 03:16:16

标签: symfony routing pattern-matching

我想使用单一路由模式构建以下URI

1 hello/first.format
2 hello/first
3 hello/first/last.format
4 hello/first/last

其中第一是必需的,最后格式是可选的。

这就是我的尝试:

hello-route:
  pattern:  /hello/{fist_name}/{last_name}.{_format}
  defaults: { _controller: AcmeHelloBundle:Default:index, last_name:Default, _format:html}
requirements:
  _format: html|rss|json
  first_name: \w+
  last_name: \w+

但不正确,因为它匹配2,3和4而不是1. 1不会失败,但它会将{first_name}与“first.format”匹配,尽管有要求。

如何使用基本路由执行此操作?

1 个答案:

答案 0 :(得分:1)

定义两条路线来完成此任务

hello-route-first:
  pattern:  /hello/{fist_name}.{_format}
  defaults: { _controller: AcmeHelloBundle:Default:index, _format:html}
requirements:
  _format: html|rss|json
  first_name: \w+

hello-route-last:
  pattern:  /hello/{fist_name}/{last_name}.{_format}
  defaults: { _controller: AcmeHelloBundle:Default:index, _format:html}
requirements:
  _format: html|rss|json
  first_name: \w+
  last_name: \w+

然后在控制器中使$ last_name参数可选

function indexAction($first_name, $last_name = "")
   {