3

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

防火墙:
        主要的:
          注销:真
          图案: 。*
          http_basic: 真
          匿名:真实
          表单登录:
            提供者:fos_userbundle
            登录路径:/登录
            使用转发:真
            check_path: /login_check
            失败路径:/login_fail
          记得我:
            键:“lkjxd%34(lksdf;SDfsf”
            寿命:31536000
            小路: /
            域名:~

如何为我的failure_path使用语言环境。尝试使用 /%locale%/failure_path 但它总是返回 en(我的默认语言环境)。它不理解路由名称。如果我使用路由的名称,例如login_fail它不起作用(像相对路径一样重定向)。

这是我的路线。

登录失败:
  模式:/{_locale}/login_fail
  默认值:{ _controller: ContactbeeProfileBundle:Profile:dashboard, _locale: en }

有什么想法可以解决吗?

4

1 回答 1

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 }
于 2013-03-26T23:32:10.770 回答