You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Twig中同时检查变量已定义且为真值?

嘿,这个问题我之前也碰到过!Twig其实有更简洁的写法,不用自定义过滤器就能搞定,刚好和你PHP里的用法对应上~

首先说最常见的场景:如果你的Twig配置里strict_variablesfalse(这是绝大多数项目的默认设置),你完全可以直接写:

{% if someVar %}
    {# 这里是变量存在且为真值时的内容 #}
{% endif %}

它的行为和PHP里的<?php if ($someVar): ?>几乎一模一样:

  • 如果变量someVar根本没定义,Twig会把它当作null处理,条件不成立
  • 如果变量存在但属于「假值」(比如0null、空字符串''false、空数组这些),条件也不成立
  • 只有当变量存在且是「真值」时,才会执行if块里的内容

那如果你的项目开启了strict_variables: true(这种模式下访问未定义变量会直接抛出异常),直接写{% if someVar %}就会报错,这时候有两种简洁的替代方案:

  • default过滤器兜底:
    {% if someVar|default(false) %}
        {# 逻辑和之前一致,还不会因为变量未定义报错 #}
    {% endif %}
    
    这个过滤器会在变量未定义或为null时返回你指定的默认值(这里是false),完美规避了严格模式下的异常问题。
  • 自定义Twig测试(如果你频繁需要这个逻辑):
    你可以在PHP代码里注册一个自定义测试,比如:
    $twig->addTest(new \Twig\TwigTest('truthy', function ($value) {
        return !empty($value);
    }));
    
    之后在模板里就能写成:
    {% if someVar is truthy %}
        {# 这里执行逻辑 #}
    {% endif %}
    
    不过要注意,在严格模式下,还是得确保变量要么定义了,要么结合default用,不然还是会报错——所以其实第一种default的方案更省心。

总的来说,绝大多数情况下,直接写{% if someVar %}就足够替代你PHP里的写法,不用写那串冗长的is defined and someVar啦~

内容的提问来源于stack exchange,提问作者The_Unknown

火山引擎 最新活动