我有很多XxxTestController类,它们都扩展了TestController类,其中测试序列(intro,start,finish测试)完成。这很有效。
但是现在我有一个名为(例如)EnglishTest的新测试,其中必须采用英文版,并且仅在/en/englishTest
网址上提供。如何将/es/englishTest
上默认访问测试的西班牙用户重定向到测试的英文版?
我知道kernel.controller
和kernel.request
个事件。但是当我EventSubscribe
kernel.request
事件时,控制器尚未确定,因此我不知道是否需要重定向。
当我EventSubscribe
到kernel.controller
事件时,我无法在任何地方更改响应。
我不想在每个控制器动作中写一个检查,因为有很多测试。我还有什么其他选择?我怎么能用symfony来解决这个问题?
编辑:
@Robert我还没有kernel.controller和kernel.request订阅者。我试过了两次但是再次删除它们,因为它没有解决我的问题。
@Liora 在 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将SurveyController扩展为SurveyBundle中的许多其他测试。有时来自TestController的操作在子控制器中被覆盖,因为在持久化/进行之前收集和预处理测试结果的方法不同。
我需要确保,当用户在/en/langTest/english
启动仅英语测试时,他操纵了/es/langTest/english
的网址,重定向将再次出现在英语语言中。而且我不想在每个控制动作中都设置if条件,因为有6种语言限制测试(到现在为止)。我正在寻找通用解决方案。