Мне нужно построить маршрут с динамическим условием.
На данный момент я просто использую requirements
, чтобы сопоставить статический список с словами:
/**
* @Route(
* "/{category}/{id}",
* requirements={
* "category"="^(foo|bar)$"
* }
* )
*
* ...
*/
Но теперь мне нужно, чтобы эти слова динамически извлекались из сервисного метода.
При поиске решения я дал надежду на condition
язык выражений ;но единственные переменные, которые доступны здесь, это контекст и запрос.Однако для достижения моей цели мне нужен полный доступ к сервисам контейнеров.
Другими словами, я бы хотел, чтобы для проверки маршрута выполнялся следующий псевдо-php:
if (in_array($category, MyService::getAllCategories())) {
/* Inform Symfony that the route matches (then use this controller) */
} else {
/* Inform Symfony that the route does not match and that the routing process
* has to go on. */
}
Обратите внимание, что основная причина моей проблемы заключается в том, что параметр {category}
размещается в начале URL-адреса, а затем может игнорировать другие маршруты.Тогда я не могу просто проверить свое состояние внутри контроллера и вернуть 404, если условие не требуется.Конечно, я мог бы поместить этот маршрут в конец в порядке процесса маршрутизации, но я не думаю, что это хорошее решение.