好吧,我正在使用本地化和登录表单。
我的登录表单网址如下:
mysite.com/en/login.html
mysite.com/ru/login.html
mysite.com/it/login.html
etc...
当登录凭据正常时,它会将用户重定向到相应的本地化主页:
mysite.com/en
mysite.com/ru
mysite.com/it
但如果凭据不好,它会将我重定向到英文页面:
mysite.com/en/login.html
因此,无论用户使用哪种语言环境,用户始终会看到英语本地化错误。 这种情况并不奇怪,因为登录页面的路由具有默认的_local值:
login:
path: /{_locale}/login.html
defaults: { _controller: MySitePortalBundle:Security:login, _locale: en }
methods: [GET]
requirements:
_locale: ru|it|en
BUT!如何学习我的应用程序以重定向错误的用户以更正_locale页面?
P.S。我读了这个"Redirecting on Login Failure",但这不能解决我的问题。
UPD:
security.yml:
security:
firewalls:
main:
form_login:
failure_path: login_failure
check_path: login_check
的routing.yml:
login_failure:
path: /{_locale}/login.html
defaults: { _controller: MySitePortalBundle:Security:login, _locale: en }
requirements:
_locale: ru|it|en
login_check:
path: /login_check
答案 0 :(得分:2)
如果包含security.yml配置和相关的路由配置,则可以更轻松地查看您正在执行的操作。但我认为你的routing.yml中缺少一些东西以及security.yml文件。
从您提到的docs,您需要在security.yml中使用以下内容:
security:
firewalls:
main:
form_login:
# ...
failure_path: login_failure
现在在routing.yml文件中你需要这样的东西:
login_failure:
pattern: /{_locale}/homepage
requirements:
_locale: ru|it|en
我没有对此进行测试,但它应该可行。我想你只是错过了必要的路线配置。
当您在路由中指定{_locale}时,symfony2应该将语言环境存储在会话中,因此应用程序应该知道重定向的位置。您可以在文档上了解更多相关信息 - the locale and the url
答案 1 :(得分:1)
应用程序重定向到默认语言环境,因为登录过程通过login_check路径。如果在此路径的路由中没有{_locale}参数,则使用应用程序的默认_locale。
好的配置是:
<强> security.yml:强>
security:
firewalls:
main:
form_login:
# ...
check_path: login_check
failure_path: login_failure
<强>的routing.yml:强>
login_failure:
path: /{_locale}/login.html
defaults: { _controller: MySitePortalBundle:Security:login, _locale: en }
requirements:
_locale: ru|it|en
login_check:
path: /{_locale}/login_check
requirements:
_locale: ru|it|en
将{_locale}参数添加到login_check路由后,它不会在登录过程中丢失。