我已经构建了一个由此控制器操作呈现的登录表单:
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 ”。
谢谢!
答案 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,
));