Nuevo en Symfony 4.1: Configuración concisa de rutas
El componente Routing de Symfony permite definir requerimientos y valores
por defecto para las variables de las rutas mediante las opciones requirements
y defaults
respectivamente.
En el siguiente ejemplo, la ruta definida mediante una anotación PHP indica
que la variable page
solo admite números enteros y su valor por defecto es 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) { // ... } }
Cuando la configuración es simple, este formato no es muy conciso. Por eso en Symfony 4.1 hemos introducido una nueva funcionalidad para hacer más concisa la configuración de las rutas. El anterior ejemplo en Symfony 4.1 sería así:
/** * @Route("/blog/{page<\d+>?1}", name="blog_list") */ public function list($page) { // ... }
La nueva sintaxis es {nombre-de-variable<requerimientos>?valor-por-defecto}
y funciona en cualquier formato de configuración que utilices (anotaciones, YAML
o XML):
blog_list: # sin requerimientos y sin valor por defecto path: /blog/{page} # con requerimientos pero sin valor por defecto path: /blog/{page<\d+>} # sin requerimientos pero con un valor por defecto path: /blog/{page?1} # sin requerimientos pero con un valor por defecto = null path: /blog/{page?} # con requerimientos y con un valor por defecto = null path: /blog/{page<.*>?}
Aunque puedes usar esta configuración para más de una variable dentro de la ruta, no es aconsejable hacerlo si la configuración resultante es demasiado compleja:
// el nuevo formato de configuración es menos legible en este caso: /** @Route("/{_locale<en|es|fr>?en}/blog/{category<news|releases|security>?news}/{page<\d+>?1}", name="blog_list") */ public function list($page) { } // en este caso, mejor seguir usando el formato tradicional (que también puedes // combinar con el nuevo formato solo para algunas variables determinadas) /** * @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) { }
Esta funcionalidad fue contribuida por Nicolas Grekas en el pull request #26518.
Fuente: New in Symfony 4.1: Inlined routing configuration
Comentarios
Proyectos Symfony destacados
La forma más sencilla de generar el backend de tus aplicaciones Symfony. Ver más
Síguenos en @symfony_es para acceder a las últimas noticias.