【问题标题】:Is there any way in Twig to determine if a method/parameter exists without putting ifs everywhere?Twig 中是否有任何方法可以确定方法/参数是否存在而不将 if 放在任何地方?
【发布时间】:2015-05-23 05:30:34
【问题描述】:

当同时使用 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 合作很愉快,因为它似乎并不在意。

【问题讨论】:

    标签: symfony twig


    【解决方案1】:

    纯 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 开发人员应该考虑提供“一般变量默认值”选项 :-)

    【讨论】:

    • 原来 Twig 是开源的,我们是 Twig 的开发者... facepalm
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    • 2023-03-27
    • 2019-05-17
    • 2020-11-17
    相关资源
    最近更新 更多