Новое в Symfony 5.1: Приоритет аннотаций маршрутов

Маршруты Symfony могут включать переменные части, называемые параметрами, для соответствия различным URL-адресам, имеющим одинаковую структуру. Хотя вы можете ограничить значения параметров каждого маршрута, два или более маршрутов могут соответствовать одному и тому же URL.

В этих случаях Symfony использует маршрут, который был определен первым. Если вы определяете маршруты, используя файлы YAML, XML или PHP, вы можете изменить порядок маршрутов в соответствии со своими потребностями. Однако при использовании аннотаций для определения маршрутов изменение порядка может быть намного сложнее.

Вот почему в Symfony 5.1 добавили опцию приоритета маршрута, но только для аннотаций. Как обычно в других частях Symfony, приоритет — это положительное или отрицательное целое число, по умолчанию равное 0. Чем выше его значение, тем больше приоритет у маршрута:

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
    {
        // ...
    }
}

В Symfony 5.1 при получении запроса на URL-адрес /foo Symfony будет сопоставлять route2, поскольку его приоритет равен 10 (а приоритет route1 равен 0 по умолчанию).