Table of Contents
Questions & Feedback
Found a typo or an error?
Want to improve this document? Edit it.
Need support or have a technical question?
Post to the user mailing-list.
Master Symfony2 fundamentals
Symfony hosting done right
Discover the SensioLabs Support
How to allow a "/" character in a route parameter
How to allow a "/" character in a route parameter¶
Sometimes, you need to compose URLs with parameters that can contain a slash
/. For example, take the classic /hello/{name} route. By default,
/hello/Fabien will match this route but not /hello/Fabien/Kris. This
is because Symfony uses this character as separator between route parts.
This guide covers how you can modify a route so that /hello/Fabien/Kris
matches the /hello/{name} route, where {name} equals Fabien/Kris.
Configure the Route¶
By default, the Symfony routing components requires that the parameters
match the following regex path: [^/]+. This means that all characters
are allowed except /.
You must explicitly allow / to be part of your parameter by specifying
a more permissive regex path.
- YAML
1 2 3 4 5
_hello: path: /hello/{name} defaults: { _controller: AcmeDemoBundle:Demo:hello } requirements: name: ".+"
- XML
1 2 3 4 5 6 7 8 9 10 11
<?xml version="1.0" encoding="UTF-8" ?> <routes xmlns="http://symfony.com/schema/routing" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symfony.com/schema/routing http://symfony.com/schema/routing/routing-1.0.xsd"> <route id="_hello" path="/hello/{name}"> <default key="_controller">AcmeDemoBundle:Demo:hello</default> <requirement key="name">.+</requirement> </route> </routes>
- PHP
1 2 3 4 5 6 7 8 9 10 11
use Symfony\Component\Routing\RouteCollection; use Symfony\Component\Routing\Route; $collection = new RouteCollection(); $collection->add('_hello', new Route('/hello/{name}', array( '_controller' => 'AcmeDemoBundle:Demo:hello', ), array( 'name' => '.+', ))); return $collection;
- Annotations
1 2 3 4 5 6 7 8 9 10 11 12
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; class DemoController { /** * @Route("/hello/{name}", name="_hello", requirements={"name" = ".+"}) */ public function helloAction($name) { // ... } }
That's it! Now, the {name} parameter can contain the / character.





is a trademark of Fabien Potencier. All rights reserved.