我的路线定义如下:
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
没有必须在我的模板中指定它...
有什么想法吗?
感谢您的帮助, 此致
答案 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>