0

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

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

其中first是必需的,lastformat是可选的。

这是我尝试过的:

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”。

如何使用基本路由来做到这一点?

4

1 回答 1

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 = "")
   {
于 2013-04-01T04:15:24.253 回答