美文网首页
Twig表达式

Twig表达式

作者: Cute_小肥鸡 | 来源:发表于2020-06-16 18:16 被阅读0次

Twig 表达式分为字面表达式、数学表达式、逻辑表达式、比较表达式、包含表达式、测试表达式、字符串插值表达式及其它表达式等多种类型。

字面表达式

字面表达式表达的就是其字面含义,如字符串、数字、数组、哈希、布尔、空值等数据类型。如 "Hello World", 42, 42.23, ["foo", "bar"], {"foo": "bar"}, true, false, null 等等

  • 字符串:使用单引号和双引号包围,如果字符串包含特殊字符,需要使用\进行转义,如 'It's good', 'C:\Program Files';
  • 整数和浮点数:直接写入数值本身即可,如 42, 42.23;
  • 数组:使用方括号[]包围,使用逗号,分隔数组中的每一个值,如["foo", "bar"];
  • 哈希表:使用大括号{}包围,使用逗号,分隔键值对,键值对使用冒号:连接,如 {"foo": "bar"},{2: 'foo', 4: 'bar'};
  • 布尔值:ture为真,false为假
  • null:表示没有指定值,变量不存在时便会返回 null。(none是null的别名)

数学表达式

使用数学表达式可以在模板中进行数值计算,Twig支持以下操作符:

  • +:加法运算符,如 {{ 1 + 1 }} 结果为 2
  • -:减法运算符,如 {{ 3 - 2 }} 结果为 1
  • *:乘法运算符,如 {{ 2 * 2 }} 结果为 4
  • **:次方运算符,如 {{ 2 ** 3 }} 结果为 8(即2的3次方)
  • /:除法运算符,如 {{ 1 / 2 }} 结果为 0.5
  • %:余数运算符,如 {{ 20 / 7 }} 结果为 6
  • //:整除运算符,如 {{ 20 // 7 }} 结果为 2

逻辑表达式

用于连接多个表达式并判断结果真假(ture/false)

  • and:与运算
  • or:或运算
  • not:否运算

比较表达式

用于对表达式两侧的数据进行比较

  • ( == ):等于
  • ( != ):不等于
  • ( < ):小于
  • ( > ):大于
  • ( <= ):小于或等于
  • ( >= ):大于或等于
    starts with 和 ends with 用于对字符串起始文本进行对比,如
{% if 'Twig' starts with 'T' %}
{% endif %}

{% if 'Twig' ends with 'g' %}
{% endif %}

正则表达式:较为复杂的字符串匹配可以用 matches 操作符使用正则表达式

{% if phone matches '/^[\\d\\.]+$/' %}
{% endif %}

包含运算符(Containment Operator)

使用 in 运算符判断左侧数据是否包含在右侧数据中

{# 下列例子结果都为 true #}

{{ 1 in [1, 2, 3] }}

{{ 'cd' in 'abcde' }}

测试运算符

使用 is 运算符判断左侧数据是否与右侧测试项相符

{# 测试name变量是否为奇数 #}
{{ name is odd }}

{# 测试是否与常量相符 #}
{% if post.status is constant('Post::PUBLISHED') %}

{% if post.status is not constant('Post::PUBLISHED') %}

{% if not (post.status is constant('Post::PUBLISHED')) %}

Twig内置的测试项有 constant, defined, divisible_by, empty, even, iterable, null, odd, same_as。

其它运算符

  • |:应用过滤器,如 {{ name|title }};
  • ..:基于前后数值创建整数集,如 {{ 1..5 }} 等同于 {{ range(1, 5) }};
  • ~:字符串连接符,将连接有表达式结果都转为字符串
  • .:取数组或对象的值,如 foo.bar;
  • []:取数组的值,如 foo['bar'];
  • ? ::三元运算符,如 {{ foo ? 'yes' : 'no' }};
  • ??:空接运算符,如 {{ foo ?? 'no' }} 表示如果 foo存在且非空,返回foo,否则返回 no。同行于 {{ foo ? foo : 'no' }}

字符串插值表达式

使用在双引号字符串中使用 #{表达式} 格式语法,可以将表达式结果插入字符串中

{{ "foo #{bar} baz" }}
{{ "foo #{1 + 2} baz" }}

空白符控制

使用 spaceless 标签可以移除 HTML 标签之间的空白符

{% spaceless %}
    <div>
        <strong>foo bar</strong>
    </div>
{% endspaceless %}

{# 输出结果会移除HTML标签间的所有空白符
结果为:<div><strong>foo bar</strong></div> 
#}

除了使用 spaceless 标签,还可以在使用 - 控制符来移除开头或结尾的空白符

{% set value = 'no spaces' %}
{#- No leading/trailing whitespace -#}
{%- if true -%}
    {{- value -}}
{%- endif -%}

{# 输出结果:'no spaces' #}


{% set value = 'no spaces' %}
<li>    {{- value }}    </li>

{# 输出结果:'<li>no spaces    </li>' #}

相关文章

网友评论

      本文标题:Twig表达式

      本文链接:https://www.haomeiwen.com/subject/dhirxktx.html