Twig模板引擎使用笔记
安装配置
1. 新建一个目录 libs
2. 在该目录下新建文件 composer.json,往该文件写入以下内容:
3. {
4. "require": {
5. "twig/twig": "1.*"
6. }
7. }
8. 在 libs 目录上执行 composer install 安装 Twig(前提是已安装 Composer 包管理器)
9. 在 libs 上级目录新建三个文件夹:templates、templates_c、web,其中 templates 用来存放模板文件,templates_c 用来存放编译缓存文件,web 用来存放 PHP 源文件
10. 在 libs 上级目录新建文件 MyTwig.php 公共文件,内容如下:
11. // 引用 Composer 自动加载文件
12. require_oncedirname(__FILE__).'/libs/vendor/autoload.php';
13.
14. // 注册 Twig 加载器
15. Twig_Autoloader::register();
16.
17. // 设置基本的配置项
18. $loader = new Twig_Loader_Filesystem(dirname(__FILE__).'/templates');
19. $twig = new Twig_Environment($loader, array(
20. 'cache' =>dirname(__FILE__).'/templates_c',
21. 'auto_reload' => true
22. ));
23. 后续使用时,只需让 web 目录下的 PHP 文件引用该公共文件,且在 templates 目录下放置好对应的模板即可,引用公共文件的语句为:require_oncedirname(dirname(__FILE__)).'/MyTwig.php';
24. 基本的模板渲染语句:echo $twig->render('abc.html.twig', array('name' => 'Ruchee'));
可用符号
== != <>>= <= + - ~ * / // % ** | [] . .. and or not in is b-and b-or b-xor
部分符号的含义如下
∙ ~:连接两字符串,相当于 PHP 中的点号
∙ //:整除
∙ **:乘方,相当于 PHP 中的 ^
∙ b-and、b-or、b-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 方法 Bar()
5. 调用对象的 is 方法 foo.isBar()
6. 以上都没匹配上则返回 null
几个内建的全局变量
∙ _self:当前模板的引用
∙ _context:当前上下文的引用
∙ _charset:当前字符集设置的引用
测试语句
∙ 三元运算符。如 {{ '' ? 'a' : 'b' }} => 'b'
∙ xxx is yyy
∙ xxx is not yyy
控制结构
∙ {% if aaa %} xxx {% elseifbbb %} yyy {% else %} zzz:判断语句
∙ {% for %} xxx {% endfor %}:迭代变量
∙ {% do %}:没什么其他含义,{% do 1+2 %} 等同于 {{ 1+2 }}
∙ {% flush %}:刷新输出缓冲,等同于 flush
∙ {% include %}:包含模板
∙ {% extends %}:扩展模板
∙ {% embed %} xxx {% endembed %}:包含模板并扩展该模板的内容,相当于 include 和 extends 的结合体
∙ {% use %}:包含模板,近似于多重继承
∙ php模板引擎原理{% 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_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:是否已定义
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论