在Twig中,检查一个数组的特定键是否存在
在PHP中,我们可以使用函数array_key_exists()来检查数组中是否存在一个键。
在Twig模板语言中,我们可以简单地通过使用if语句来检查variables或对象的属性是否存在,如下所示:
{% if app.user %} do something here {% else %} do something else {% endif %}
但是我们如何使用Twig来检查数组的键是否存在? 我尝试{% if array.key %} ,但它给了我一个错误:
Key "key" for array with keys "0, 1, 2, 3...648" does not exist
作为将数据传递到模板的主要方式之一是使用数组,似乎应该有一些这样做的方法。 有什么想法吗?
树枝例子:
{% if array.key is defined %} // do something {% else %} // do something else {% endif %}
你可以使用keysfunction
{% if myVar in someOtherArray|keys %}
快速回答(TL; DR)
- DeveloperTLindel想要testingTwig中是否存在数组键。
- DeveloperTLindel想要捕获与未定义密钥相关的任何错误。
- 这可以使用
defaultfilter来处理。
详细的答案
上下文
- Twig 2.x(Wed 2017-03-08最新版本)
- 一般用途的
defaultfilter。
问题
- 场景:
- DeveloperTLindel想要testingTwig中是否存在数组键。
- DeveloperTLindel希望避免由可能未定义的键导致的任何错误或exception。
解
- DeveloperTLindel可以使用
defaultfilter。 - 由于未定义的variables,
defaultfilter捕捉到任何exception,并允许替代值的短路替代。 -
defaultfilter是可链接的。
Example01
{# - ****************************************
testing关联数组中的单个键
- #}
{% - set mystring = myarray ['key-no-existo'] | default('__ BLANK__') - %}
{# - ****************************************
testing关联数组中的多个键
- #}
{% - 设置mystring = myarray ['alpha']
|默认(myArray的[ '喝彩'])
|默认(myArray的[ '查理'])
|默认( '__ BLANK__')
- %}
也可以看看
- SO:类似的问题与不存在或空variables有关
- SO:一般用途的默认filter