Маршруты 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
по умолчанию).