嗨,我刚刚开始学习树枝,但遇到了以下错误:
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错误消息,但是我不明白即使我将“已定义”放入其中也为什么仍然得到它树枝逻辑。
答案 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 %}