好的,首先,我知道有人问过关于这个主题的类似问题
如: Impossible to access an attribute Error
但是,他们并没有完全回答我的问题。我正在为正在编写的应用程序设置登录系统,并且在尝试显示登录身份验证错误消息时遇到错误。
我的模板中有以下代码:
{% if error %}
{% block message %}{{ error.message }}{% endblock %}
{% endif %}
这就是我在调用模板的控制器中所拥有的:
public function loginAction()
{
$request = $this->getRequest();
$session = $request->getSession();
// get the login error if there is one
if($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)){
$error = $request->attributes->get(
SecurityContext::AUTHENTICATION_ERROR
);
} else {
$error = $session->get(SecurityContext::AUTHENTICATION_ERROR);
$session->remove(SecurityContext::AUTHENTICATION_ERROR);
}
return $this->render(
'SaveSecurityBundle:Security:login.html.twig',
array(
'last_username' => $session->get(SecurityContext::LAST_USERNAME),
'error' => $error,
)
);
}
这应该相当简单,但是当我尝试加载登录表单时,我不断收到以下消息:
Impossible to access a key ("message") on a NULL variable ("") in SaveSecurityBundle:Security:login.html.twig at line 5
我尝试转储error
变量并得到以下结果(我只包括我实际需要的部分,实际转储是几千行):
object(Symfony\Component\Security\Core\Exception\BadCredentialsException)#49 (8) {
["token":"Symfony\Component\Security\Core\Exception\AuthenticationException":private]=>
object(Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken)#50
["message":protected]=>
string(15) "Bad credentials"
所以消息就在那里,但是由于某种原因,当它应该传递错误对象时,它传递了一个空引用。
我完全不知道如何解决这个问题,到目前为止,我唯一的解决方案是一起删除error
打印输出,这样就无法通知用户他们为什么没有登录。