How to allow a "/" character in a route parameter

Version: 2.1
Edit this page

Warning: You are browsing the documentation for Symfony 2.1, which is no longer maintained.

Read the updated version of this page for Symfony 5.3 (the current stable version).

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 pattern: [^/]+. This means that all characters
are allowed except /.

You must explicitly allow / to be part of your parameter by specifying
a more permissive regex pattern.

  • YAML
  • XML
  • PHP
  • Annotations
1
2
3
4
5
_hello:
    pattern: /hello/{name}
    defaults: { _controller: AcmeDemoBundle:Demo:hello }
    requirements:
        name: ".+"

That's it! Now, the {name} parameter can contain the / character.

This work, including the code samples, is licensed under a Creative Commons BY-SA 3.0 license.