Twig表达式
2020-06-16 本文已影响0人
Cute_小肥鸡
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>' #}