twig - 无法访问NULL变量上的键(“message”)

时间:2013-09-05 23:20:59

标签: symfony twig

好的,首先,我知道有关此主题的类似问题

如: 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变量并得到以下内容(我只包括我实际需要的那些行,实际转储是几千行):< / p>

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打印输出,这样就无法告知用户他们为什么没有登录英寸

1 个答案:

答案 0 :(得分:1)

问题是你在Twig块中渲染错误消息而你不能将一个块放入if块 - 无论条件如何都会呈现。

其中一个解决方案是使块包裹if语句:

{% block message %}
    {% if error %}{{ error.message }}{% endif %}
{% endblock %}