symfony2.0.0在security.yml中获取语言环境

时间:2013-03-26 09:08:28

标签: symfony symfony-2.0

我正在使用symfony2.0.0。我没有机会更新symfony。 这是我的security.yml

firewalls:
        main:
          logout: true
          pattern: .*
          http_basic: true
          anonymous: true
          form_login:
            provider: fos_userbundle
            login_path: /login
            use_forward:  true
            check_path: /login_check
            failure_path: /login_fail
          remember_me:
            key:      "lkjxd%34(lksdf;SDfsf"
            lifetime: 31536000
            path:     /
            domain:   ~

如何在 failure_path 中使用区域设置。试图使用/%locaale%/ failure_path,但它总是返回en(我的默认语言环境)。它不了解路由名称。如果我使用路线的名称,例如 login_fail 它不起作用(重定向像相对路径)。

这是我的路线。

login_fail:
  pattern: /{_locale}/login_fail
  defaults: { _controller: ContactbeeProfileBundle:Profile:dashboard, _locale: en }

有任何想法要解决它吗?

1 个答案:

答案 0 :(得分:1)

在实际处理请求之前编译DIC之前加载配置,因为它可以从Request访问,您无法访问配置中的区域设置

如果你不介意一个额外的重定向,你可以有一个动作,在认证失败后将用户重定向到正确的路线:

namespace Acme\DemoBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class SecurityController extends Controller {
    public function failedAction() {
        return $this->redirect($this->generateUrl('login_fail_localized'), [
            'locale' => $this->getRequest()->getLocale()
        ]);
    }
}

设置失败路径以匹配其路线:

# routing.yml
login_fail:
    pattern: /login_fail
        defaults: { _controller: AcmeDemoBundle:Security:failed }

login_fail_localized:
    pattern: /{locale}/login_fail
        defaults: { _controller: ContactbeeProfileBundle:Profile:dashboard }