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

Publicada el

16 de marzo de 2020

Etiquetas

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.