树枝未定义的PHP变量

时间:2019-01-23 14:33:27

标签: php twig

嗨,我刚刚开始学习树枝,但遇到了以下错误:

  

PHP注意:未定义的变量:message

这是我从控制器渲染视图的方式:

echo $twig->render('/km-profile/km-edit-password.twig', array('error' => $message) );

变量$ message来自模型,它是一个看起来像数组

$message = array(
            'message' => 'please fill in all fields!',
            'status' => 'error'
        );

在视图中,我以以下方式使用树枝:

{% if error is defined and error.status == 'error' %}
  <div class="alert alert-danger">{{error.message|raw}}</div>
{% endif %}

仅在我提交表单并检测到错误之后才设置$message变量。我知道我可以在模型中开始验证之前放置一个空的$message数组,然后它将解决php错误消息,但是我不明白即使我将“已定义”放入其中也为什么仍然得到它树枝逻辑。

2 个答案:

答案 0 :(得分:3)

  

但是我不明白,即使我将“已定义”放入细枝逻辑中,为什么我仍然能得到它

因为错误不是从树枝生成的,而是在这里:

echo $twig->render('/km-profile/km-edit-password.twig', array('error' => $message) );

尝试

$params = [];
if(!empty($message)) { 
    $params['error'] = $message;
}
echo $twig->render('/km-profile/km-edit-password.twig', $params);

如果您有PHP > 7,也可以使用null coalescing operator

echo $twig->render('/km-profile/km-edit-password.twig', ['error' => $message ?? false]);

或使用PHP < 7

echo $twig->render('/km-profile/km-edit-password.twig', ['error' => isset($message) ? $message : false]);

答案 1 :(得分:0)

@Xatenev的答案是正确的,但我不想让控制器代码混乱,恕我直言,最好检查模板中变量的存在。

尝试一下:

{% if error is defined and error.status == 'error' and error.message is defined  %}
  <div class="alert alert-danger">{{error.message|raw}}</div>
{% endif %}

{% if error is defined and error.status == 'error'  %}
      <div class="alert alert-danger">
          {%if error.message is defined %}
               {{error.message|raw}}
          {% endif %}
      </div>
{% endif %}