Twig模板引擎使用笔记(转载)

2023-12-15 00:08

本文主要是介绍Twig模板引擎使用笔记(转载),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

看到一篇整理挺好的一片twig的文章,特转载过来,以备后用。转载自:http://www.ruchee.com/code/programming_languages/twig_base.html

 

 

安装配置

  1. 新建一个目录 libs
  2. 在该目录下新建文件 composer.json,往该文件写入以下内容:
    {"require": {"twig/twig": "1.*"}
    }
    
  3. 在 libs 目录上执行 composer install 安装 Twig(前提是已安装 Composer 包管理器)
  4. 在 libs 上级目录新建三个文件夹:templatestemplates_cweb,其中 templates 用来存放模板文件,templates_c 用来存放编译缓存文件,web 用来存放 PHP 源文件
  5. 在 libs 上级目录新建文件 MyTwig.php 公共文件,内容如下:
    // 引用 Composer 自动加载文件
    require_once dirname(__FILE__).'/libs/vendor/autoload.php';// 注册 Twig 加载器
    Twig_Autoloader::register();// 设置基本的配置项
    $loader = new Twig_Loader_Filesystem(dirname(__FILE__).'/templates');
    $twig   = new Twig_Environment($loader, array('cache'       => dirname(__FILE__).'/templates_c','auto_reload' => true
    ));
    
  6. 后续使用时,只需让 web 目录下的 PHP 文件引用该公共文件,且在 templates 目录下放置好对应的模板即可,引用公共文件的语句为:require_once dirname(dirname(__FILE__)).'/MyTwig.php';
  7. 基本的模板渲染语句:echo $twig->render('abc.html.twig', array('name' => 'Ruchee'));

可用符号

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

部分符号的含义如下

  • ~:连接两字符串,相当于 PHP 中的点号
  • //:整除
  • **:乘方,相当于 PHP 中的 ^
  • b-andb-orb-xor:按位与、按位或、按位异或
  • -:减法以及去除空白的简写用法,如 {{- 数据 }} => 去除左边的空白{{ 数据 -}} => 去除右边的空白{{- 数据 -}} => 去除两边的空白

变量

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

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

数据统一用 foo.bar 的形式表示,如果 bar 是形如 my-name 的名字,则需写成 attribute(foo, 'my-name'),下面是 Twig 对 foo.bar 的解析顺序:

  1. 当成数组的元素 foo['bar']
  2. 当成对象的属性 foo.bar
  3. 当成对象的方法 foo.bar()
  4. 调用对象的 get 方法 foo.getBar()
  5. 调用对象的 is 方法 foo.isBar()
  6. 以上都没匹配上则返回 null

几个内建的全局变量

  • _self:当前模板的引用
  • _context:当前上下文的引用
  • _charset:当前字符集设置的引用

测试语句

  • 三元运算符。如 {{ '' ? 'a' : 'b' }} => 'b'
  • xxx is yyy
  • xxx is not yyy

控制结构

  • {% 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 的新名字

内建过滤器

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

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

{% 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_attrjscssurl
  • 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/494389

相关文章

使用shardingsphere实现mysql数据库分片方式

《使用shardingsphere实现mysql数据库分片方式》本文介绍如何使用ShardingSphere-JDBC在SpringBoot中实现MySQL水平分库,涵盖分片策略、路由算法及零侵入配置... 目录一、ShardingSphere 简介1.1 对比1.2 核心概念1.3 Sharding-Sp

Java 正则表达式的使用实战案例

《Java正则表达式的使用实战案例》本文详细介绍了Java正则表达式的使用方法,涵盖语法细节、核心类方法、高级特性及实战案例,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录一、正则表达式语法详解1. 基础字符匹配2. 字符类([]定义)3. 量词(控制匹配次数)4. 边

Python Counter 函数使用案例

《PythonCounter函数使用案例》Counter是collections模块中的一个类,专门用于对可迭代对象中的元素进行计数,接下来通过本文给大家介绍PythonCounter函数使用案例... 目录一、Counter函数概述二、基本使用案例(一)列表元素计数(二)字符串字符计数(三)元组计数三、C

使用Spring Cache本地缓存示例代码

《使用SpringCache本地缓存示例代码》缓存是提高应用程序性能的重要手段,通过将频繁访问的数据存储在内存中,可以减少数据库访问次数,从而加速数据读取,:本文主要介绍使用SpringCac... 目录一、Spring Cache简介核心特点:二、基础配置1. 添加依赖2. 启用缓存3. 缓存配置方案方案

使用Python的requests库来发送HTTP请求的操作指南

《使用Python的requests库来发送HTTP请求的操作指南》使用Python的requests库发送HTTP请求是非常简单和直观的,requests库提供了丰富的API,可以发送各种类型的HT... 目录前言1. 安装 requests 库2. 发送 GET 请求3. 发送 POST 请求4. 发送

Nginx中配置使用非默认80端口进行服务的完整指南

《Nginx中配置使用非默认80端口进行服务的完整指南》在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助... 目录一、为什么需要使用非默认端口二、配置Nginx使用非默认端口的基本方法2.1 修改listen指令

Python WebSockets 库从基础到实战使用举例

《PythonWebSockets库从基础到实战使用举例》WebSocket是一种全双工、持久化的网络通信协议,适用于需要低延迟的应用,如实时聊天、股票行情推送、在线协作、多人游戏等,本文给大家介... 目录1. 引言2. 为什么使用 WebSocket?3. 安装 WebSockets 库4. 使用 We

python中的显式声明类型参数使用方式

《python中的显式声明类型参数使用方式》文章探讨了Python3.10+版本中类型注解的使用,指出FastAPI官方示例强调显式声明参数类型,通过|操作符替代Union/Optional,可提升代... 目录背景python函数显式声明的类型汇总基本类型集合类型Optional and Union(py

Java使用正则提取字符串中的内容的详细步骤

《Java使用正则提取字符串中的内容的详细步骤》:本文主要介绍Java中使用正则表达式提取字符串内容的方法,通过Pattern和Matcher类实现,涵盖编译正则、查找匹配、分组捕获、数字与邮箱提... 目录1. 基础流程2. 关键方法说明3. 常见场景示例场景1:提取所有数字场景2:提取邮箱地址4. 高级

使用SpringBoot+InfluxDB实现高效数据存储与查询

《使用SpringBoot+InfluxDB实现高效数据存储与查询》InfluxDB是一个开源的时间序列数据库,特别适合处理带有时间戳的监控数据、指标数据等,下面详细介绍如何在SpringBoot项目... 目录1、项目介绍2、 InfluxDB 介绍3、Spring Boot 配置 InfluxDB4、I