Symfony 2在登录失败时重定向本地化页面

时间:2014-01-02 17:28:34

标签: symfony redirect

好吧,我正在使用本地化和登录表单。

我的登录表单网址如下:

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

2 个答案:

答案 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路由后,它不会在登录过程中丢失。