我习惯在树枝上做这件事:
{% 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 %}
总结一下:可迭代检查是执行“已定义”还是会引发错误?
而且:一个空数组是否可迭代?
提前致谢。
答案 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 %}