Symfony 2:如何强制path()方法添加_format?

时间:2012-01-04 14:21:26

标签: routing symfony

我的路线定义如下:

my_route:
  pattern: /{name}.{_format}
  defaults: { _controller: AcmeMyBundle:Default:index, _format: html }
  requirements:
    _format: html

问题是在模板(视图)中使用以下代码时:

<a href="{{ path('my_route', {'name': 'my-name'}) }}">my link</a>

生成的网址为:

/my-name

但我希望它是:

/my-name.html

没有必须在我的模板中指定它...

有什么想法吗?

感谢您的帮助, 此致

4 个答案:

答案 0 :(得分:3)

你能不能:

my_route:
  pattern: /{name}.html
  defaults: { _controller: AcmeMyBundle:Default:index}

并且

<a href="{{ path('my_route', {'name': 'my-name'}) }}">my link</a>

会给你url:/my-name.html

答案 1 :(得分:1)

这是设计的。由于您将默认格式定义为html,因此路由器无需生成.html扩展名的链接。

如果您确实要显示扩展程序,则应将其从defaults列表中删除。缺点是您必须始终指定此路线的格式。

答案 2 :(得分:0)

一个老问题,但如果有人正在寻找一种仍然使用默认值生成的方法,Symfony 有一种新的(ish)方法来实现这一点。来自docs

<块引用>

如果你想总是在生成的 URL 中包含一些默认值 (例如强制生成 /blog/1 而不是 /blog 前面的例子)添加!参数名称前的字符: /blog/{!page}

因此,在您的 yaml 文件示例中,只需像这样添加 !

my_route:
  pattern: /{name}.{!_format}
  defaults: { _controller: AcmeMyBundle:Default:index, _format: html }
  requirements:
    _format: html

通过这种方式,您可以添加诸如 html|json|xml 之类的要求,但仍然始终使用 html 生成默认路由。

答案 3 :(得分:-2)

这会有所帮助(测试过并且对我有用)?

<a href="{{ path('my_route', {'name': 'my-name'}) }}.html">my link</a>