【问题标题】:Symfony routing : path() method don't write default param valueSymfony 路由:path() 方法不写入默认参数值
【发布时间】:2016-12-10 18:32:54
【问题描述】:

我有两条路线:

// routing.yml
foo_list:
    path: /foo
    defaults: { _controller:MyBundle:Foo:index }

foo_view:
    path: /foo/{id}
    defaults:
        _controller: AlfnooBundle:Exploitant:view
        id : 1
    requirements:
        id: \d*

第一个是列出所有 foo 的页面,第二个是显示 foo n 详细视图的页面。 {ID}。在我的 Twig 视图中,我生成了指向 foo_view 的链接,如下所示:

{{path('foo_view', {'id': foo.id})}}

如果id 不是1(默认值)也没关系:/foo/12345。但是如果id1path()方法会生成一个错误的url,它会省略id参数,生成的路由是:/foo。不是foo_view,而是foo_list。如果我更改默认值,问题出在默认值上。

{{path('foo_view', {'id': 1})}}     => /foo     => BAD ! I want /foo/1
{{path('foo_view', {'id': 123})}}   => /foo/123 => GOOD

那么我怎样才能强制 Twig path() 方法总是添加参数值,即使它是默认值?我想保留以下网址:

/foo            => foo_list
/foo/           => foo_view with id=1
/foo/12345      => foo_view with id=12345

谢谢。

【问题讨论】:

  • 为什么不删除这个 id 的默认值?
  • @DOZ 因为我想要对 url /foo 和 url /foo/ 进行不同的操作,并保持 /foo/ 没有 id 有效(默认为 1)。
  • 让需求,并删除默认...
  • 正如@Alsatian 所说:)
  • @Alsatian 我的默认值呢?我在控制器中管理它?这对我来说似乎并不优雅:)

标签: php symfony routing twig


【解决方案1】:

你不能这样做,至少不能这样。 Symfony 的路由器不会生成带有斜杠的路径。

path('foo_view') 生成的路径将始终是 /foo 并且永远不会是 /foo/ 并且由于您已为 id 指定默认值,因此路径也永远不会是 /foo/1,正如您所看到的.

那里有is a way to coerce trailing slashes,但如果你问我,它会很笨拙。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    • 1970-01-01
    • 2017-10-23
    • 2021-01-08
    • 2017-01-17
    • 2020-05-17
    • 2012-08-04
    相关资源
    最近更新 更多