似乎我真的在本地化我们的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}”,一切正常。
有什么想法吗?
提前致谢
亨尼斯