Резервный маршрут в Symfony 4 при использовании аннотации - PullRequest
0 голосов
/ 15 сентября 2018

В настоящее время я использую маршрутизацию через аннотации контроллера в приложении Symfony 4.

Я пытаюсь направить все запросы, которые не соответствуют существующей аннотации (например, http://example.com/route-that-isnt-defined), к определенному контроллеру и функции (например, DefaultController::dynamicPage(), которая имеет логику, чтобы найти, должен ли я обслуживать контент или запуск a NotFoundHttpException).

Определение маршрута для DefaultController::dynamicPage(), поскольку @Route("/{param}") предшествует и перехватывает все другие определенные маршруты, делая их недоступными.

Я пробовал это решение для Symfony 3 , не зная, сработает ли оно, но застрял на том, на что должен ссылаться «AppBundle», поскольку это не то, что существует в моем проекте.

В настоящее время в моем route.yaml есть только один маршрут для индекса, так как все остальные именованные маршруты определяются с помощью аннотаций:

index:
    path: /
    controller: App\Controller\DefaultController::index

Я ищу либо правильный способ реализации решения Symfony 3 в Symfony 4, либо альтернативный метод достижения маршрутизации, который я хочу без , выполняющего что-то замысловатое, например расширение контроллер исключений и вставка функций маршрутизации в случаи NotFoundHttpException.

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Я еще не перешел на sf4, но разве эта проблема не связана только с порядком оцениваемых маршрутов?Т.е. вы могли бы попытаться, просто добавив явное определение, чтобы загрузить аннотации DefaultController.php в вашем rout.yml в качестве последнего элемента?То есть что-то вроде этого должно сработать (работает как минимум в sf2.8):

app_annotations:
    resource: '@MyBundle/Controller/'
    type:     annotation

fallback_annotations:
    resource: '@MyBundle/Controller/DefaultController.php'
    type:     annotation

или если это не работает в sf4 (если он автоматически загружает аннотации маршрута контроллера с какой-то другой логикой)другой обходной путь - просто назвать этот резервный контроллер так, чтобы он был последним в алфавитном порядке (и, следовательно, маршруты там должны оцениваться последними). ​​

0 голосов
/ 16 сентября 2018

Вы можете попробовать добавить прослушиватель событий ядра , который будет обрабатывать kernel.exception событие , а для случаев, когда исключением является NotFoundHttpException, вы вернете свой пользовательский ответ вместо страницы 404 Not Found.

Это может быть довольно гибким, поскольку вы можете реализовать любую пользовательскую логику в таком слушателе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...