日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Twig模板语言入门

發(fā)布時間:2025/3/19 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Twig模板语言入门 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉(zhuǎn)載地址:http://pengbotao.cn/twig-template-language.html

Twig中有兩種定界符{% ... %} 和 {{ ... }} , 前一種用來執(zhí)行語句,比如for循環(huán)、IF判斷、過濾等操作,后一種模版中用來顯示變量。

Twig常用用法

可用符號

== != < > >= <= + - ~ * / // % ** | [] . .. and or not in is b-and b-or b-xor
部分符號的含義如下

~:連接兩字符串,相當于 PHP 中的點號
//:整除
**:乘方,相當于 PHP 中的 ^
b-and、b-or、b-xor:按位與、按位或、按位異或
-:減法以及去除空白的簡寫用法,如 {{- 數(shù)據(jù) }} => 去除左邊的空白、{{ 數(shù)據(jù) -}} => 去除右邊的空白、{{- 數(shù)據(jù) -}} => 去除兩邊的空白

注釋

{# This is Twig Comment #}

變量

foo 為PHP賦值變量, 則模版中可以使用 {{ foo }}
如果該變量為數(shù)組或者對象,則可以使用 {{ foo.bar }}來表示,也可以直接調(diào)用類中的方法,如 {{ foo.getName }} 或當有參數(shù)傳遞時使用 {{ foo.getName(p1, p2, p3) }}

當模版中使用{{ foo.bar }}時,PHP會做如下判斷來檢測對應(yīng)變量的值:
1. 檢測foo是否是數(shù)組,并且bar是一個有效的KEY
2. 如果foo為對象,則檢測bar是否為有效的屬性
3. 如果foo為對象,但bar不是一個有效的屬性,則檢測bar是否為有效方法
4. 如果foo為對象,但bar不是一個有效的方法,則檢測getBar是否為有效方法
5. 如果foo為對象,但getBar不是有效方法,則檢測isBar是否為有效方法
6. 如果沒有,則返回null

當foo為數(shù)組時,模版也可以這樣使用:{{ foo['bar'] }}

變量未定義默認值設(shè)置:
{{ var|default('var is not defined') }}

可使用 {% set 變量名=變量值 %} 聲明變量,也可寫成 {% set 變量名 %} 變量值 {% endset %}

PHP 中非關(guān)聯(lián)數(shù)組被映射成 [元素1, 元素2, ...],關(guān)聯(lián)數(shù)組則被映射成 {鍵1: 值1, 鍵2: 值2, ...}

數(shù)組遍歷

-- 按數(shù)組value遍歷:

1 2 3 {% for value in foo %} ????{{ value }} {% endfor %}

-- 按數(shù)組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 非數(shù)組,還可以使用else語句,如:

1 2 3 4 5 {% for key, value in foo %} ????{{ key}}:{{value }} {% else %}? ????foo is Not a Array {% endfor %}

-- 也可以直接帶條件,遍歷二維數(shù)組時比較有用,可用value.field來判斷:

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

循環(huán)體內(nèi)部變量:
loop.index 循環(huán)的次數(shù)(從1開始)
loop.index0 循環(huán)的次數(shù)(從0開始)
loop.revindex 循環(huán)剩余次數(shù)(最小值為1)
loop.revindex0 循環(huán)剩余次數(shù)(最小值為0)
loop.first 當?shù)谝淮窝h(huán)的時候返回true
loop.last 當最后一次循環(huán)的時候返回true
loop.length 循環(huán)的總數(shù)
loop.parent 被循環(huán)的數(shù)組

條件語句

-- 需要使用 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 3 4 5 6 7 8 9 {{ '{{' }} {% raw %} ????<ul> ????{% for item in seq %} ????????<li>{{ item }}</li> ????{% endfor %} ????</ul> {% endraw %}

控制結(jié)構(gòu)

{% if aaa %} xxx {% elseif bbb %} yyy {% else %} zzz:判斷語句
{% for %} xxx {% endfor %}:迭代變量
{% do %}:沒什么其他含義,{% do 1+2 %} 等同于 {{ 1+2 }}
{% flush %}:刷新輸出緩沖,等同于 flush
{% include %}:包含模板
{% extends %}:擴展模板
{% embed %} xxx {% endembed %}:包含模板并擴展該模板的內(nèi)容,相當于 include 和 extends 的結(jié)合體
{% use %}:包含模板,近似于多重繼承
{% from aaa import bbb as ccc %}:從指定模板導(dǎo)入宏并設(shè)置別名
{% macro %} xxx {% endmacro %}:定義宏以便多次調(diào)用,與定義 PHP 函數(shù)無異
{% sandbox %} {% include xxx %} {% endsandbox %}:對導(dǎo)入的模板指定沙箱模式,只對 include 語句有效,只在沙箱模式已開啟的情況下生效
{% block xxx %} 或 {% block %} xxx {% endblock %}:定義代碼塊或覆蓋代碼塊
{% set xxx %} 或 {% set %} xxx {% endset %}:在模板內(nèi)定義變量
{% filter %} xxx {% endfilter %}:多行過濾器
{% spaceless %} xxx {% endspaceless %}:去除 HTML 片段中的空格
{% autoescape %} xxx {% endautoescape %}:將字符串安全地處理成合法的指定數(shù)據(jù)
{% verbatim %} xxx {% endverbatim %}:阻止模板引擎的編譯,是 raw 的新名字

內(nèi)建過濾器

過濾器用來修飾數(shù)據(jù),各過濾器可以用豎線分隔進行鏈式調(diào)用,用括號傳遞參數(shù)

也可以將過濾器當成單獨的函數(shù)來用,形式如下:

1 2 3 {% filter 過濾器名 %} 待處理的數(shù)據(jù) {% endfilter %}

batch:將數(shù)組按指定的個數(shù)分割成更小的數(shù)組,可選的第二個參數(shù)用來在元素不夠的情況下進行填充。如 {{ [1, 2, 3, 4, 5]|batch(2, 'NoItem') }} => [[1, 2], [3, 4], [5, 'NoItem']]
date_modify:修改時間,常與 date 聯(lián)用。如 {{ ''|date_modify('+3 days')|date('Y-m-d') }} => 將當前時間加3天后顯示
default:當所修飾的數(shù)據(jù)不存在或為空時,提供默認值。如 {{ ''|default('Ruchee') }} => 'Ruchee'
escape:將字符串安全地處理成合法的指定數(shù)據(jù),可簡寫為 e,支持多種轉(zhuǎn)換模式,默認模式為 html,其他可選模式有 html_attr、js、css、url
first:返回數(shù)組的第一個元素或字符串的第一個字符。如 {{ {a: 1, b: 2, c: 3}|first }} => 1
last:返回數(shù)組的最后一個元素或字符串的最后一個字符。如 {{ {a: 1, b: 2, c: 3}|last }} => 3
replace:替換一個字符串中的指定內(nèi)容。如 {{ '%s1 love %s2'|replace({'%s1': 'Ruchee', '%s2': 'Vim'}) }} => 'Ruchee love Vim'
raw:讓數(shù)據(jù)在 autoescape 過濾器里失效

借用自PHP自帶函數(shù)的過濾器

abs:取絕對值
nl2br:將字符串里的 \n 替換成 <br/>
join:將數(shù)組的各個元素按指定分隔符組成字符串
sort:對數(shù)組排序
trim:去除字符串首尾的指定字符,默認為空格
date:格式化時間,可處理與 strtotime 兼容的字符串,或 DateTime/DateInterval 的實例,可選的第二個參數(shù)用于指定時區(qū),如果所修飾的數(shù)據(jù)為空則默認為當前時間
reverse:反轉(zhuǎn)一個數(shù)組或字符串,在 array_reverse 的基礎(chǔ)上增加了對字符串的處理
slice:截取數(shù)組或字符串的一部分,在 array_slice 的基礎(chǔ)上增加了對字符串的處理
keys:將數(shù)組的全部鍵名提取成一個數(shù)組,等同于 array_keys
merge:合并兩數(shù)組,近似于 array_merge 。如 {{ 數(shù)組1|merge(數(shù)組2) }}
length:返回數(shù)組元素的個數(shù)或字符串的長度,等同于 count 和 strlen 的結(jié)合體
capitalize:將字符串的首字母大寫,等同于 ucfirst
title:將字符串中每個單詞的首字母大寫,等同于 ucwords
lower:將字符串所有字母全部變成小寫,等同于 strtolower
upper:將字符串所有字母全部變成大寫,等同于 strtoupper
split:將字符串分割成數(shù)組,等同于 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:格式化數(shù)值,等同于 number_format
convert_encoding:編碼轉(zhuǎn)換,第一個參數(shù)指定轉(zhuǎn)換后的編碼,第二個參數(shù)指定轉(zhuǎn)換前的編碼,近似于 iconv

內(nèi)建函數(shù)

even:是否為偶數(shù)
odd:是否為奇數(shù)
empty:是否為空
null:是否為 null
defined:是否已定義
sameas:目標變量與指定值是否指向的是內(nèi)存中的同一個地址,使用形式 if 變量值 is sameas(指定值)
divisibleby:目標數(shù)值是否能夠被指定值整除,使用形式 if 目標數(shù)值 divisibleby(指定值),其中指定值不能為 0
iterable:目標變量是否是數(shù)組或者是否可迭代,使用形式 if 變量值 is iterable
attribute:動態(tài)獲取變量屬性值,兩種使用形式為 attribute(數(shù)組, '元素名') 和 attribute(對象, '方法名', 可選參數(shù))
block:重復(fù)引用指定代碼塊,如 {{ block('title') }}
constant:從字符串或?qū)ο笕〉贸A恐?br /> cycle:循環(huán)顯示一個數(shù)組的元素,調(diào)用形式為 cycle(數(shù)組, 一個循環(huán)變量)
date:格式化時間
dump:在開啟調(diào)試模式的情況下顯示詳細的變量信息,等同于 var_dump
include:包含其他模板文件
parent:在覆蓋代碼片段時用于引用父片段的內(nèi)容
random:制造一個隨機數(shù)
range:返回一個指定區(qū)間的數(shù)組,可指定步長,Twig 使用 .. 作為其簡用法,等同于 range
template_from_string:根據(jù)字符串加載模板

總結(jié)

以上是生活随笔為你收集整理的Twig模板语言入门的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。