Documentação do Symfony - versão 3.1
Renderizada do repositório symfony-docs-pt-BR no Github
Às vezes, você precisa compor URLs com parâmetros que podem conter uma barra
/
. Por exemplo, considere a rota clássica /hello/{name}
. Por padrão,
/hello/Fabien
irá corresponder a esta rota, mas /hello/Fabien/Kris
não irá.
Isso ocorre porque o Symfony usa esse caractere como separador entre as partes da rota.
Este guia aborda como você pode modificar a rota para que /hello/Fabien/Kris
corresponda à rota /hello/{name}
, onde {name}
iguala Fabien/Kris
.
Por padrão, o componente de roteamento do Symfony requer que os parâmetros correspondam
com o seguinte path de expressão regular: [^/]+
. Isso significa que todos os caracteres
são permitidos, exceto /
.
Você deve explicitamente permitir que a /
faça parte de seu parâmetro, especificando
um path regex mais permissivo.
1 2 3 4 5 | _hello:
path: /hello/{name}
defaults: { _controller: AcmeDemoBundle:Demo:hello }
requirements:
name: ".+"
|
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>
|
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;
|
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)
{
// ...
}
}
|
É isso! Agora, o parâmetro {name}
pode conter o caractere /
.