У меня есть много классов XxxTestController, которые все расширяют класс TestController, в котором выполняется последовательность испытаний (вступление, начало, окончание теста). Это прекрасно работает.
Но теперь у меня есть новый тест (например, EnglishTest), который должен быть принят на английском языке и доступен только по URL-адресу /en/englishTest
. Как я могу перенаправить испанского пользователя, который посещает тест по умолчанию на /es/englishTest
, на английскую версию теста?
Я знаю kernel.controller
и kernel.request
события. Но когда я EventSubscribe
для kernel.request
события, Контроллер еще не определен, поэтому я не знаю, требуется ли перенаправление.
А когда я EventSubscribe
на kernel.controller
событие, я не могу нигде изменить ответ.
Я не хочу писать проверку в каждом действии контроллера, потому что есть много тестов. Какие у меня есть другие варианты? Как я могу решить это с Symfony?
EDIT:
@ Роберт. У меня еще нет подписчика kernel.controller или kernel.request. Я попробовал оба, но удалил их снова, поскольку это не решило мою проблему.
@ Лиора
Маршрутизация выглядит примерно так в BaseBundle :
testsDirectory:
path: /{_locale}/langTest
resource: '@SurveyBundle/Resources/config/routing'
type: directory
defaults:
_locale: es|en|pt|de|pl
и позже в SurveyBundle
englishTestIntro:
path: /englishIntro
defaults:
_controller: 'SurveyBundle:EnglishTestController:intro'
englishTest:
path: /english
defaults:
_controller: 'SurveyBundle:EnglishTestController:start'
englishTestFinish:
path: /englishFinish
defaults:
_controller: 'SurveyBundle:EnglishTestController:finish'
EnglishTestController расширяет TestController, как и многие другие тесты в SurveyBundle. Иногда действия из TestController переопределяются в дочерних контроллерах из-за различных способов сбора и предварительной обработки результатов теста перед сохранением / выполнением.
Мне нужно убедиться, что когда пользователь запустил тест только на английском языке в /en/langTest/english
и он манипулирует URL-адресом /es/langTest/english
, перенаправление снова произойдет на английском языке. И я не хочу ставить условие if в каждом контрольном действии, так как на данный момент существует 6 языковых тестов. Я ищу общее решение.