如何在kernel.controller

时间:2018-04-27 14:23:28

标签: php symfony controller translation

我有很多XxxTestController类,它们都扩展了TestController类,其中测试序列(intro,start,finish测试)完成。这很有效。

但是现在我有一个名为(例如)EnglishTest的新测试,其中必须采用英文版,并且仅在/en/englishTest网址上提供。如何将/es/englishTest上默认访问测试的西班牙用户重定向到测试的英文版?

我知道kernel.controllerkernel.request个事件。但是当我EventSubscribe kernel.request事件时,控制器尚未确定,因此我不知道是否需要重定向。 当我EventSubscribekernel.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种语言限制测试(到现在为止)。我正在寻找通用解决方案。

0 个答案:

没有答案