简体   繁体   English

树枝未定义的PHP变量

[英]twig undefined php variable

Hi I've just started to study twig and I've got the following error: 嗨,我刚刚开始研究树枝,但遇到了以下错误:

PHP Notice: Undefined variable: message PHP注意:未定义的变量:message

This is the way i render the view from my controller: 这是我从控制器渲染视图的方式:

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

The variable $message comes from the model and it is an array that looks like 变量$ message来自模型,它是一个数组,看起来像

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

In the view I'm using twig in the following way: 在视图中,我以以下方式使用树枝:

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

The $message variable is only set after I submit the form and detect an error. 仅在提交表单并检测到错误后才设置$message变量。 I know i could put an empty $message array before I start validation in the model, then it will solve the php error message, but I don't understand why I still get it even if I put "is defined" into twig logic. 我知道我可以在模型中开始验证之前放置一个空的$message数组,然后它将解决php错误消息,但是即使将“已定义”放入细枝逻辑中,我仍然不明白为什么我仍然得到它。

but I don't understand why i still get it even if i put "is defined" into twig logic 但我不明白,即使我将“已定义”放入细枝逻辑中,为什么我仍然能得到它

Because the error is not generated from twig but here: 因为错误不是从树枝产生的,而是在这里:

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

try 尝试

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

If you have PHP > 7 you can make use of the null coalescing operator too: 如果您的PHP > 7也可以使用null合并运算符

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

or with PHP < 7 : PHP < 7

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

@Xatenev answer is correct, but I prefer not to make mess in controller code, IMHO it's better to check variable existence in template. @Xatenev的答案是正确的,但我不想在控制器代码中弄乱,恕我直言,最好检查模板中变量的存在。

Try this: 尝试这个:

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

or 要么

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM