TWIG模板使用说明

2024-05-06 09:32
文章标签 模板 使用 说明 twig

本文主要是介绍TWIG模板使用说明,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Twig中有两种定界符{% ... %} 和 {{ ... }} , 前一种用来执行语句,比如for循环、IF判断、过滤等操作,后一种模版中用来显示变量。

Twig常用用法

可用符号

== != < > >= <= + - ~ * / // % ** | [] . .. and or not in is b-and b-or b-xor

部分符号的含义如下

~:连接两字符串,相当于 PHP 中的点号

//:整除

**:乘方,相当于 PHP 中的 ^

b-and、b-or、b-xor:按位与、按位或、按位异或

-:减法以及去除空白的简写用法,如 {{- 数据 }} => 去除左边的空白、{{ 数据 -}} => 去除右边的空白、{{- 数据 -}} => 去除两边的空白

注释

{# This is Twig Comment #}

变量

foo 为PHP赋值变量, 则模版中可以使用 {{ foo }}

如果该变量为数组或者对象,则可以使用 {{ foo.bar }}来表示,也可以直接调用类中的方法,如 {{ foo.getName }} 或当有参数传递时使用 {{ foo.getName(p1, p2, p3) }}

当模版中使用{{ foo.bar }}时,PHP会做如下判断来检测对应变量的值:

1. 检测foo是否是数组,并且bar是一个有效的KEY

2. 如果foo为对象,则检测bar是否为有效的属性

3. 如果foo为对象,但bar不是一个有效的属性,则检测bar是否为有效方法

4. 如果foo为对象,但bar不是一个有效的方法,则检测getBar是否为有效方法

5. 如果foo为对象,但getBar不是有效方法,则检测isBar是否为有效方法

6. 如果没有,则返回null

当foo为数组时,模版也可以这样使用:{{ foo['bar'] }}

变量未定义默认值设置:

{{ var|default('var is not defined') }}

可使用 {% set 变量名=变量值 %} 声明变量,也可写成 {% set 变量名 %} 变量值 {% endset %}

PHP 中非关联数组被映射成 [元素1, 元素2, ...],关联数组则被映射成 {键1: 值1, 键2: 值2, ...}

数组遍历

-- 按数组value遍历:

1 2 3

{% for value in foo %} {{ value }} {% endfor %}

-- 按数组key遍历:

1 2 3

{% for key in foo|keys %} {{ key }} {% endfor %}

-- 按key,value遍历

1 2 3

{% for key, value in foo %} {{ key}}:{{value }} {% endfor %}

-- 如果 foo 非数组,还可以使用else语句,如:

1 2 34 5

{% for key, value in foo %} {{ key}}:{{value }} {% else %} foo is Not a Array {% endfor %}

-- 也可以直接带条件,遍历二维数组时比较有用,可用value.field来判断:

1 2 3

{% for key, value in foo if value == 1%} {{ key}}:{{value }} {% endfor %}

循环体内部变量:

loop.index 循环的次数(从1开始)

loop.index0 循环的次数(从0开始)

loop.revindex 循环剩余次数(最小值为1)

loop.revindex0 循环剩余次数(最小值为0)

loop.first 当第一次循环的时候返回true

loop.last 当最后一次循环的时候返回true

loop.length 循环的总数

loop.parent 被循环的数组

条件语句

-- 需要使用 or 和 and 代替 ||、&&

1 2 3

{% if a == '1' or b == '2' %} a = 1 or b = 2 {% endif %}

-- 判断变量是否定义

1 2 3

{% if var is not defined %} {# do something #} {% endif %}

-- 是否为NULL

1 2 3

{% if var is null %} {# do something #} {% endif %}

-- 是否为false

1 2 3

{% if var is sameas(false) %} {# do something %} {% endif %}

解析定界符

1 2 34 5 67 8 9

{{ '{{' }} {% raw %} <ul> {% for item in seq %} <li>{{ item }}</li> {% endfor %} </ul> {% endraw %}

控制结构

{% if aaa %} xxx {% elseif bbb %} yyy {% else %} zzz:判断语句

{% for %} xxx {% endfor %}:迭代变量

{% do %}:没什么其他含义,{% do 1+2 %} 等同于 {{ 1+2 }}

{% flush %}:刷新输出缓冲,等同于 flush

{% include %}:包含模板

{% extends %}:扩展模板

{% embed %} xxx {% endembed %}:包含模板并扩展该模板的内容,相当于 include 和 extends 的结合体

{% use %}:包含模板,近似于多重继承

{% from aaa import bbb as ccc %}:从指定模板导入宏并设置别名

{% macro %} xxx {% endmacro %}:定义宏以便多次调用,与定义 PHP 函数无异

{% sandbox %} {% include xxx %} {% endsandbox %}:对导入的模板指定沙箱模式,只对 include 语句有效,只在沙箱模式已开启的情况下生效

{% block xxx %} 或 {% block %} xxx {% endblock %}:定义代码块或覆盖代码块

{% set xxx %} 或 {% set %} xxx {% endset %}:在模板内定义变量

{% filter %} xxx {% endfilter %}:多行过滤器

{% spaceless %} xxx {% endspaceless %}:去除 HTML 片段中的空格

{% autoescape %} xxx {% endautoescape %}:将字符串安全地处理成合法的指定数据

{% verbatim %} xxx {% endverbatim %}:阻止模板引擎的编译,是 raw 的新名字

内建过滤器

过滤器用来修饰数据,各过滤器可以用竖线分隔进行链式调用,用括号传递参数

也可以将过滤器当成单独的函数来用,形式如下:

1 2 3

{% filter 过滤器名 %} 待处理的数据 {% endfilter %}

batch:将数组按指定的个数分割成更小的数组,可选的第二个参数用来在元素不够的情况下进行填充。如 {{ [1, 2, 3, 4, 5]|batch(2, 'NoItem') }} => [[1, 2], [3, 4], [5, 'NoItem']]

date_modify:修改时间,常与 date 联用。如 {{ ''|date_modify('+3 days')|date('Y-m-d') }} => 将当前时间加3天后显示

default:当所修饰的数据不存在或为空时,提供默认值。如 {{ ''|default('Ruchee') }} => 'Ruchee'

escape:将字符串安全地处理成合法的指定数据,可简写为 e,支持多种转换模式,默认模式为 html,其他可选模式有 html_attr、js、css、url

first:返回数组的第一个元素或字符串的第一个字符。如 {{ {a: 1, b: 2, c: 3}|first }} => 1

last:返回数组的最后一个元素或字符串的最后一个字符。如 {{ {a: 1, b: 2, c: 3}|last }} => 3

replace:替换一个字符串中的指定内容。如 {{ '%s1 love %s2'|replace({'%s1': 'Ruchee', '%s2': 'Vim'}) }} => 'Ruchee love Vim'

raw:让数据在 autoescape 过滤器里失效

借用自PHP自带函数的过滤器

abs:取绝对值

nl2br:将字符串里的 \n 替换成 <br/>

join:将数组的各个元素按指定分隔符组成字符串

sort:对数组排序

trim:去除字符串首尾的指定字符,默认为空格

date:格式化时间,可处理与 strtotime 兼容的字符串,或 DateTime/DateInterval 的实例,可选的第二个参数用于指定时区,如果所修饰的数据为空则默认为当前时间

reverse:反转一个数组或字符串,在 array_reverse 的基础上增加了对字符串的处理

slice:截取数组或字符串的一部分,在 array_slice 的基础上增加了对字符串的处理

keys:将数组的全部键名提取成一个数组,等同于 array_keys

merge:合并两数组,近似于 array_merge 。如 {{ 数组1|merge(数组2) }}

length:返回数组元素的个数或字符串的长度,等同于 count 和 strlen 的结合体

capitalize:将字符串的首字母大写,等同于 ucfirst

title:将字符串中每个单词的首字母大写,等同于 ucwords

lower:将字符串所有字母全部变成小写,等同于 strtolower

upper:将字符串所有字母全部变成大写,等同于 strtoupper

split:将字符串分割成数组,等同于 str_split

striptags:去除字符串中的 HTML/PHP 标记,等同于 strip_tags

url_encode:编码链接字符串,等同于 urlencode

json_encode:编码 JSON 格式,等同于 json_encode

format:格式化一个字符串,近似于 printf 。如 {{ 'My name is %s, and I love %s'|format('Ruchee', 'Vim') }} => 'My name is Ruchee, and I love Vim'

number_format:格式化数值,等同于 number_format

convert_encoding:编码转换,第一个参数指定转换后的编码,第二个参数指定转换前的编码,近似于 iconv

内建函数

even:是否为偶数

odd:是否为奇数

empty:是否为空

null:是否为 null

defined:是否已定义

sameas:目标变量与指定值是否指向的是内存中的同一个地址,使用形式 if 变量值 is sameas(指定值)

divisibleby:目标数值是否能够被指定值整除,使用形式 if 目标数值 divisibleby(指定值),其中指定值不能为 0

iterable:目标变量是否是数组或者是否可迭代,使用形式 if 变量值 is iterable

attribute:动态获取变量属性值,两种使用形式为 attribute(数组, '元素名') 和 attribute(对象, '方法名', 可选参数)

block:重复引用指定代码块,如 {{ block('title') }}

constant:从字符串或对象取得常量值

cycle:循环显示一个数组的元素,调用形式为 cycle(数组, 一个循环变量)

date:格式化时间

dump:在开启调试模式的情况下显示详细的变量信息,等同于 var_dump

include:包含其他模板文件

parent:在覆盖代码片段时用于引用父片段的内容

random:制造一个随机数

range:返回一个指定区间的数组,可指定步长,Twig 使用 .. 作为其简用法,等同于 range

template_from_string:根据字符串加载模板

这篇关于TWIG模板使用说明的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/964011

相关文章

C++11的函数包装器std::function使用示例

《C++11的函数包装器std::function使用示例》C++11引入的std::function是最常用的函数包装器,它可以存储任何可调用对象并提供统一的调用接口,以下是关于函数包装器的详细讲解... 目录一、std::function 的基本用法1. 基本语法二、如何使用 std::function

CentOS系统使用yum命令报错问题及解决

《CentOS系统使用yum命令报错问题及解决》文章主要讲述了在CentOS系统中使用yum命令时遇到的错误,并提供了个人解决方法,希望对大家有所帮助,并鼓励大家支持脚本之家... 目录Centos系统使用yum命令报错找到文件替换源文件为总结CentOS系统使用yum命令报错http://www.cppc

使用@Slf4j注解,log.info()无法使用问题

《使用@Slf4j注解,log.info()无法使用问题》在使用Lombok的@Slf4j注解打印日志时遇到问题,通过降低Lombok版本(从1.18.x降至1.16.10)解决了问题... 目录@Slf4androidj注解,log.info()无法使用问题最后解决总结@Slf4j注解,log.info(

Zookeeper安装和配置说明

一、Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。 ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境; ■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例; ■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble) Zookeeper通过复制来实现

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

poj3468(线段树成段更新模板题)

题意:包括两个操作:1、将[a.b]上的数字加上v;2、查询区间[a,b]上的和 下面的介绍是下解题思路: 首先介绍  lazy-tag思想:用一个变量记录每一个线段树节点的变化值,当这部分线段的一致性被破坏我们就将这个变化值传递给子区间,大大增加了线段树的效率。 比如现在需要对[a,b]区间值进行加c操作,那么就从根节点[1,n]开始调用update函数进行操作,如果刚好执行到一个子节点,