Symfony2:覆盖表单登录

时间:2015-10-01 10:16:08

标签: php symfony twig

我已经构建了一个由此控制器操作呈现的登录表单:

public function loginAction() {
    $helper = $this->get('security.authentication_utils');
    return $this->render('SecurityLoginBundle:Login:login.html.twig', array(
                'last_username' => $helper->getLastUsername(),
                'error' => $helper->getLastAuthenticationError(),
    ));
}

如果用户未提供有效的电子邮件/密码,则“getLastAuthenticationError()”会抛出“BadCredentialsException”;如果用户被禁用,则抛出“DisabledException”。两个异常对象都有“消息”属性,但我想更改标签。我怎么做?

一个丑陋的解决方法是在我的Twig模板中读取这些消息并用我的措辞替换它们但是有更好的方法吗?就像检查Twig中“错误”参数的类一样。不幸的是

get_class($helper->getLastAuthenticationError())

无效 - 它返回“ Security \ LoginBundle \ Controller \ LoginController ”。

谢谢!

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。 当我看到

时,我解决了它
class Symfony\Component\Security\Http\AuthenticationAuthenticationUtils 

getLastAuthenticationError具有默认参数$ clearSession = true

所以你可以处理错误并在清除会话之后

    $helper = $this->get('security.authentication_utils');
    $error = $helper->getLastAuthenticationError();

如果错误是某个Exception的实例,您也可以使用自定义消息抛出异常

    if ($error instanceof BadCredentialsException) {
         throw \Exception('Your Custom exception'); 
    }

如果需要,请添加try catch,并使用自定义消息创建新的var $ error。 返回内容消息后,因为它是一个例外:

    return $this->render('SecurityLoginBundle:Login:login.html.twig', array(
            'last_username' => $helper->getLastUsername(),
            'error' => $error ? $error->getMessage() : null,
    ));