I have this route:
pfs_platform_home:
path: /{page}/{reset}
defaults: { _controller: PFSPlatformBundle:Advert:index, page: 1, reset: true }
requirements:
page: \d*
reset: true|false
If I use a link without specifying anything for reset, the router uses the default value and in my indexAction, the reset parameter is automatically converted to Boolean true. i.e.:
<li><a href="{{ path('pfs_platform_home') }}">Inicio</a></li>
But when I do that, this time $reset appears as a string 'false' in my indexAction, not a Boolean:
<a href="{{ path('pfs_platform_home', {'page': p, 'reset': 'false'}) }}">{{ p }}</a>
What am I missing?
URL paths and parameters are always strings. If you have an URL like
http://example.com/page/true?foo=2&bar=false
the server cannot know that the true should be interpreted as boolean, while foo is supposed to be an integer and bar is supposed to be boolean, too.
If you want to process URL parameters, always pass and treat them as strings.
Later, you can validate them (e.g. is_numeric will tell you if a string represents a number) or transform them to other types.
What you're also experiencing here is YAML's handling of unquoted strings:
Strings may generally be left unquoted, if they don't contain a character that has a meaning in YAML.
But: true in YAML is boolean true. Therefore, your default reset: true is indeed a boolean value. Declare it as reset: "true" and it should work. The reset: true|false should be fine, IMO (didn't test it, but this is treated as a regex, so it should be interpreted as string.)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With