如何本地化symfony2自定义登录处理程序?

时间:2014-06-23 13:19:49

标签: symfony login localization

似乎我真的在本地化我们的symfony2应用程序时遇到了麻烦。至少我找不到任何方法让它起作用。这是我的问题:

我们有一个带登录处理程序的symfony2应用程序,目前没有任何本地化。我了解到,我必须使用{_locale}在 routing.yml 中添加每个路径。好吧,除了/ login和/ login_check之外的每个路径。我的根条目现在是这样的:

root:
   pattern: /
   defaults:
       _controller: FrameworkBundle:Redirect:urlRedirect
       path: /%locale%
       permanent: true

根据浏览器中的设置,我会到/ en,/ fr,/ pl等。工作得很好。现在我在 session.yml 中定义了一个登录处理程序,如下所示:

secured_area:
    pattern: ^/(fileupload|mydata|mysettings|myprofile|login_check|home|my_items)
    form_login:
        check_path: /login_check
        login_path: /login
        success_handler: login_success_handler

login_success_handler是一个从AuthenticationSuccessHandlerInterface派生的服务。我需要它用于onSecurityInteractiveLogin和onAuthenticationSuccess方法。如果用户的帐户完全激活,我需要检查后者。根据这一事实,我必须将他重定向到默认主页或信息页面。

当symfony从url获取语言环境设置时,我们遇到了麻烦,因为“/ login_check”没有语言环境。将{_locale}放入session.yml是不可能的 - 根据文档 - 它不应该是必要的。但是在这里我必须使用目标url生成并返回RedirectResponse。此URL由路由器精心制作,并将其注入服务中。

return new RedirectResponse($this->router->generate('_welcome_user'));

_welcome_user在routing.yml中定义如下:

_welcome_user:
    path:  /{_locale}/home
    defaults: { _controller: MasterpieceMainBundle:Start:index }

但实际上生成的url看起来是这样的:

http://localhost/Symfony/Masterpiece/web/login_check/home

但应该阅读

http://localhost/Symfony/Masterpiece/web/en/home

这是我的第一个麻烦。我的第二个麻烦是,用户未经过身份验证。

如果我从 routing.yml 中删除所有“{_locale}”,一切正常。

有什么想法吗?

提前致谢

亨尼斯

0 个答案:

没有答案