Twig模版语言入门

2020-06-16  本文已影响0人  Cute_小肥鸡

学习网址

https://www.kancloud.cn/yunye/twig-cn/159454

介绍

Twig是一款灵活、快速、安全的PHP模板引擎;
Twig拥有非常简洁的语法,它使得模版更具可读性;
Twig的语法非常易学,即使是网页设计师也能毫无阻碍地快速完成工作;

常用用法

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

1、可用符号

== != < > >= <= + - ~ * / // % ** | [] . .. and or not in is b-and b-or b-xor
部分符号的含义如下:
~:连接两字符串,相当于 PHP 中的点号
//:整除
**:乘方,相当于 PHP 中的 ^
b-and、b-or、b-xor:按位与、按位或、按位异或
-:减法以及去除空白的简写用法,如 {{- 数据 }} => 去除左边的空白、{{ 数据 -}} => 去除右边的空白、{{- 数据 -}} => 去除两边的空白

2、注释

{# This is Twig Comment #}

3、变量

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, ...}

4、数组遍历
{% for value in foo %}
     {{ value }}
{% endfor %}
{% for key in foo|keys %}
     {{ key }}
{% endfor %}
{% for key, value in foo %}
     {{ key}}:{{value }}
{% endfor %}
{% for key, value in foo %}
     {{ key}}:{{value }}
{% else %} 
     foo is Not a Array
{% endfor %}
{% 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 被循环的数组

5、条件语句
{% if a == '1' or b == '2' %}
a = 1 or b = 2
{% endif %}
{% if var is not defined %}
     {# do something #}
{% endif %}
{% if var is null %}
     {# do something #}
{% endif %}
{% if var is sameas(false) %}
     {# do something %}
{% endif %}
6、解析定界符
{{ '{{' }}
 
{% raw %}
     <ul>
     {% for item in seq %}
         <li>{{ item }}</li>
     {% endfor %}
     </ul>
{% endraw %}
7、控制结构

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

8、内建过滤器

过滤器用来修饰数据,各过滤器可以用竖线分隔进行链式调用,用括号传递参数
也可以将过滤器当成单独的函数来用,形式如下:

{% filter 过滤器名 %}
待处理的数据
{% endfilter %}
9、借用自PHP自带函数的过滤器
10、内建函数
上一篇 下一篇

猜你喜欢

热点阅读