Как перенаправить в Symfony на kernel.controller - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть много классов 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 языковых тестов. Я ищу общее решение.

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