我有这条路线:
pfs_platform_home:
path: /{page}/{reset}
defaults: { _controller: PFSPlatformBundle:Advert:index, page: 1, reset: true }
requirements:
page: \d*
reset: true|false
如果我在没有为 reset 指定任何内容的情况下使用链接,则路由器使用默认值,在我的indexAction中, reset 参数会自动转换为Boolean 真。 即:
<li><a href="{{ path('pfs_platform_home') }}">Inicio</a></li>
但是当我这样做时,这次$ reset在我的indexAction中显示为字符串'false',而不是布尔值:
<a href="{{ path('pfs_platform_home', {'page': p, 'reset': 'false'}) }}">{{ p }}</a>
我错过了什么?
答案 0 :(得分:1)
网址路径和参数始终是字符串。如果您有像
这样的网址http://example.com/page/true?foo=2&bar=false
服务器无法知道true
应该被解释为boolean,而foo
应该是一个整数,bar
也应该是布尔值。
如果您想处理网址参数,请务必将其作为字符串传递并处理。
稍后,您可以对其进行验证(例如is_numeric
将告诉您字符串是否代表数字)或将其转换为其他类型。
您在此处遇到的是YAML对未加引号字符串的处理:
如果字符串不包含在YAML中有意义的字符,则通常可以不加引号。
但是:YAML中的true
是 boolean true。因此,您的默认reset: true
确实是一个布尔值。将其声明为reset: "true"
,它应该有效。 reset: true|false
应该没问题,IMO(没有测试它,但这被视为正则表达式,因此它应该被解释为字符串。)
答案 1 :(得分:1)
您已经设置了参数的默认值:
pfs_platform_home:
path: /{page}/{reset}
defaults: { _controller: PFSPlatformBundle:Advert:index, page: 1, reset: true }
requirements:
page: \d*
reset: true|false
如果您不defaults:
page
,请查看1
行,如果您不为reset
提供价值,则默认为{{ 1}}。