具有多个可选参数的 Symfony 路由

Symfony route with several optional params

首先感谢阅读。我遇到了 Symfony 路由的问题。我得到了一条接收多个参数的路由:

my_route:
    path:     /route/{page}/{paramA}/{paramB}/{paramC}
    defaults: { _controller: MyBundle:MyController:index, page: null, paramA: null, paramB: null, paramC: null }

问题出在 "paramA"。它是过滤结果的文本,可以取消设置,但 "paramB" 和 "paramC" 可以。

所以我需要那个路由来处理例如:

/route/1/paramB/paramC

并在控制器中接收:

paramA = null, paramB="paramB", paramC="paramC"

现在当我处理:

/route/1/paramB/paramC

我在控制器中得到这个:

paramA="paramB", paramB="paramC", paramC=null

欢迎任何帮助。再次感谢。

这是不可能的。如 Symfony 文档中所述

You can have more than one optional placeholder,
but everything after an optional placeholder must be optional.

您已将以下内容添加到默认键,

page: null, paramA: null, paramB: null, paramC: null

所以键 page 之后的所有内容都应该在 URL 中,paramA 也是如此。所以当你想跳过一个值时,你必须在你的情况下跳过以下值。

参考:http://symfony.com/doc/current/book/routing.html#adding-requirements

诸如此类用于过滤、排序和分页的可选参数应作为查询参数传递,路由参数应仅指向所需资源。

所以:

/article?page=0&limit=10

不是:

/article/0/10

或者:

/user?active=1

不是:

/user/1

以此类推

如果您有复杂的示例,请与我们分享。