一起使用Symfony2和Twig时,如果需要这样做:
<td>{{ myObject.method.parameter }}</td>
或只是
<td>{{ myObject.parameter }}</td>
如果未设置twig文件尝试访问的内容,则会引发错误。 除了在任何地方写这个之外,是否有一种更清洁的方法来防止这种情况:
<td>{% if myObject.method.parameter is defined %}{{ myObject.method.parameter }}{% endif %}</td>
最近与Angular合作非常好,因为它似乎并不关心。
答案 0 :(得分:4)
纯Twig解决方案是使用default
过滤器:
http://twig.sensiolabs.org/doc/filters/default.html
它看起来像这样,对我来说很好用:
{{ myObject.it.is.not.designed|default('it is not defined') }}
默认文本可以是空字符串''
。
现在您必须为每个变量设置默认值。与{% autoescape %}
不同,似乎无法为更大的代码区域定义过滤器。为了简单起见,我将创建一个宏:
{% macro safeEcho(value) %}
{{ value | default('') }}
{% endmacro %}
不要忘记导入:
{% import _self as helper %}
测试:
Test:{{ helper.safeEcho(echolabels.something.something_2) }}
如果我经常使用这个,我会考虑短名称,虽然我通常不使用缩写:h.se()
有关宏的更多信息:
http://twig.sensiolabs.org/doc/tags/macro.html
如果从根本上需要这个,可能有可能覆盖Twig词法分析器:
http://twig.sensiolabs.org/doc/internals.html
我不知道Twig是Symfony2的一部分。可能是它的配置提供了另一种选择:
http://symfony.com/doc/current/reference/configuration/twig.html
最后,请看这个问题之前有过不同的答案。
How to check for null in Twig?
symfony, twig - default filter for all variables in template
也许Twig开发人员应考虑提供“常规变量默认”选项: - )