Configuração de Roteamento Inline no Symfony 4.1

Andréia Bohner
2 min readMar 23, 2018

--

O componente Routing do Symfony permite definir os requisitos e os valores padrão para os placeholders de rota usando as opções requirements e defaults, respectivamente.

Por exemplo, na rota a seguir, definida com anotações PHP, o placeholder pageé restrito para aceitar apenas inteiros e seu valor padrão é 1:

use Symfony\Component\Routing\Annotation\Route;

class BlogController extends Controller
{
/**
* @Route("/blog/{page}", name="blog_list", requirements={"page"="\d+"}, defaults={"page"="1"})
*/
public function list($page)
{
// ...
}
}

Essa configuração de rota é um pouco verbosa para condições simples. É por isso que no Symfony 4.1 você pode definir os requisitos de rota e os valores padrão inline nos placeholders. O exemplo anterior no Symfony 4.1 pode parecer com o seguinte:

/**
* @Route("/blog/{page<\d+>?1}", name="blog_list")
*/
public function list($page)
{
// ...
}

A nova sintaxe é {placeholder-name<requirements>?defaults}, cada parte é opcional e funciona em todos os formatos de configuração (anotações, YAML e XML):

blog_list:
# no requirements and no default value
path: /blog/{page}
# with requirements but no default value
path: /blog/{page<\d+>}
# no requirements but with a default value
path: /blog/{page?1}
# no requirements but with default value = null
path: /blog/{page?}
# with requirements and default value = null
path: /blog/{page<.*>?}

Você pode definir inline a configuração de vários placeholders na mesma rota, mas se existirem muitos placeholders ou se as condições forem complexas, a configuração resultante poderá ser menos legível e você provavelmente deverá reverter para a sintaxe anterior:

// this config may be too complex to inline it:

/** @Route("/{_locale<en|es|fr>?en}/blog/{category<news|releases|security>?news}/{page<\d+>?1}", name="blog_list") */
public function list($page) { }

// in this case it may be better to keep using the traditional syntax

/**
* @Route("/{_locale}/blog/{category}/{page}", name="blog_list",
* "requirements"={"_locale": "en|es|fr", "category": "news|releases|security", "page": "\d"},
* "defaults"={"_locale": "en", "category": "news", "page": "1"}
* )
*/
public function list($page) { }

Tradução de: New in Symfony 4.1: Inlined routing configuration

--

--