测试变量是否可迭代:我是否需要检查它是否是第一个定义的?

时间:2014-06-02 07:53:57

标签: twig

我习惯在树枝上做这件事:

{% if entities is defined and entities is not null and entities|length > 0 %}
....
{% endif %}

现在我遇到了Iterable-Test - > http://twig.sensiolabs.org/doc/tests/iterable.html

这样做是否足够:

{% if entities is iterable %}

还是我还需要这样做

{% if entities is defined and entities is iterable %}

总结一下:可迭代检查是执行“已定义”还是会引发错误?

而且:一个空数组是否可迭代?

提前致谢。

2 个答案:

答案 0 :(得分:3)

如果可能无法将变量传递给模板,则需要在测试之前检查是否已定义此变量是否可迭代,否则您将获得{{1}的异常}。所以正确的方法是:

Variable "entities" does not exist

但是,如果你总是传递一个变量,但你不确定它是否可以迭代,你可以简单地使用迭代检查而无需测试定义:

{% if entities is defined and entities is iterable %}

否则,如果始终在变量中传递可迭代集合,但您不确定它是否为空,则不需要检查可迭代性,只需使用{% if entities is iterable %} 循环(如果需要,还有for语句):

else

答案 1 :(得分:1)

如果您想避免使用多个条件,可以使用default filter为未定义的变量提供默认值。

{% if entities|default(null) is iterable %}

如果您想直接迭代可能未定义的entities变量:

{% for entity in entities|default([]) %}
    ...
{% else %}
    No entities to display
{% endfor %}