字符串比较运算符如何在Twig中工作?

2022-08-30 11:42:23

这怎么可能?这似乎是一个非常非常奇怪的问题(除非我错过了一些非常简单的东西):

法典:

{{ dump(nav) }}
{% if nav == "top" %}
    <div class="well">This would be the nav</div>
{% endif %}

输出:

boolean true
<div class="well">This would be the nav</div>

Screenshot

基本上,如果为真,它将输出,但它并不意味着要检查真。


答案 1

这很容易恢复:

{% set nav = true %}
{% if nav == "top" %}
ok
{% endif %}

显示。ok

根据文档

Twig允许到处表达。这些工作原理与常规PHP非常相似,即使您不使用PHP,您也应该对它感到满意。

如果你在纯PHP中测试以下表达式:

$var = true;
if ($var == "top") {
  echo 'ok';
}

它也将显示正常。

关键是:你不应该比较不同类型的变量。在这里,您将 bool 与字符串进行比较:如果您的字符串不为空,或者如果它不包含零,则其计算结果将为 true。

您还可以查看PHP手册,了解如何与不同类型的比较。

编辑

您可以使用 sameas 测试进行严格的比较,并避免类型杂耍问题。


答案 2

如果有人需要否定字符串比较语句的结果,请使用 next 构造:

{% set is_training = course_type == 'training' %}
...
{% if not is_training %}
...

推荐