Nuevo en Symfony 5.1: Prioridad en las anotaciones de rutas
Las rutas de Symfony pueden incluir partes variables llamadas parámetros para servir diferentes URLs con una misma ruta. Aunque es posible restringir el valor de los parámetros para que cada ruta sirva solo un tipo de URL, en aplicaciones complejas es posible que haya colisiones y dos o más rutas cumplan con los requisitos de la URL entrante.
En esos casos, Symfony siempre utiliza la ruta que se haya definido primero. Si defines las rutas en archivos YAML, XML o PHP, puedes reordenar las rutas fácilmente. Pero si utilizas anotaciones, reordenarlas es mucho más complicado porque tienes que reordenar métodos enteros de los controladores.
Por eso en Symfony 5.1 hemos añadido la opción de definir prioridades en las
rutas, pero solo para las anotaciones. Como es habitual en Symfony, la prioridad
es un número entero positivo o negativo cuyo valor por defecto es 0
. Cuanto
más alto es su valor, más prioridad tiene la ruta:
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\Routing\Annotation\Route; class MyController extends AbstractController { /** * @Route("/{some_parameter}", name="route1") */ public function someMethod(): Response { // ... } /** * @Route("/foo", priority=10, name="route2") */ public function anotherMethod(): Response { // ... } }
En Symfony 5.1, cuando la URL de la petición sea /foo
, Symfony ejecutará la
ruta llamada route2
porque su prioridad es 10
(y la prioridad de la otra
ruta es 0
, el valor por defecto).
Esta funcionalidad fue contribuida por Nicolas Grekas en el pull request #35608.
Fuente: New in Symfony 5.1: Route annotations priority
Comentarios
Proyectos Symfony destacados
La plataforma de eCommerce 100% Symfony que rivaliza con Magento y PrestaShop. Ver más
Síguenos en @symfony_es para acceder a las últimas noticias.