如果没有转储扩展, 那么Twig中变量的内容验证可能会非常困难。即使使用它, 有时你也会很懒惰, 并且会假设一些从PHP发送到Twig的变量的内容, 通常, 变量可以为空, 并且根据它, 你可能想做一些不同的事情, 例如打印其他文本等。开发人员习惯了空测试:
{# Or {% set variable = null %} as well #}
{% set variable = "" %}
{% if variable is empty %}
The variable is empty.
{% else %}
The variable is not empty.
{% endif %}
如果变量的值为空字符串或null, 则打印的文本将为”变量为空”。同样, 你可能要检查数组内的属性是否为空:
{# Or {% set variable = null %} as well #}
{% set variable = {
"name": "Carlos", "lastName": "Delgado"
} %}
{% if variable.name is empty %}
The variable is empty.
{% else %}
The variable is not empty.
{% endif %}
在这种情况下, 变量存在并且定义了名称键, 因此它将显示”变量不为空”。但是, 如果不存在要验证键是否存在的变量, 该怎么办?你可能需要扩展以下内容:
{% if variable is defined %}
{% if variable.name is empty %}
The variable is empty.
{% else %}
The variable is not empty.
{% endif %}
{% else %}
The variable is not defined.
{% endif %}
在这种情况下, 由于我们的变量不存在, 它将显示”变量未定义或不为空”。有点混乱, 不是很久吗?甚至忽略了你不想向用户显示未定义变量而是仅显示”变量为空”的消息。如果我告诉你有更简单的方法怎么办?使用默认过滤器!
使用默认过滤器
使用默认过滤器, 你可以轻松地验证变量是否同时存在和不为空:
{% if variable.name|default %}
The variable is not empty
{% else %}
The variable is empty.
{% endif %}
在这种情况下, 过滤器将首先验证变量” variable”是否存在, 如果存在, 则在这种情况下继续键名(如果存在且不为空), 则返回true, 因此将打印第一条消息。另一方面, 如果键存在但其值为空, 则条件将返回false:
{# Or {% set variable = null %} as well #}
{% set variable = {
"name": null, "lastName": "Delgado"
} %}
{% if variable.name|default %}
The variable is not empty
{% else %}
The variable is empty.
{% endif %}
在这种情况下将显示”变量为空”。要了解有关默认过滤器的更多信息, 请不要忘记阅读Twig网页上过滤器的官方文档。
编码愉快!
评论前必须登录!
注册