我正在使用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 }
有任何想法要解决它吗?
答案 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 }