TWIG 模板設計 快速入門手冊 中文

2021-06-03 01:14:23 字數 4237 閱讀 8048

寫了好幾篇關於twig的東西。。居然還沒寫個快速入門之類的。現在就寫

** twig 的模板就是普通的文字檔案,也不需要特別的副檔名,.html .htm .twig 都可以。

模板內的 變數 和 表示式 會在執行的時候被解析替換,標籤(tags)會來控制模板的邏輯

下面是個最小型的模板,用來說明一些基礎的東西

}

裡面包含兩種符號 和 } 第一種用來控制的比如for迴圈什麼的,第二個是用來輸出變數和表示式的

很多ide 都對twig進行高亮支援。大夥自己找需要的吧。

程式會傳遞給模板若干變數,你需要在模板裡輸出他們。例如輸出 $hello

}
如果傳遞給模板的是物件或者陣列,你可以使用點 . 來輸出物件的屬性或者方法,或者陣列的成員。或者你可以使用下標的方式。
}

}

如果你訪問的值不存在就會返回null。twig有一整套的流程來確認值是否存在。

for.bar會進行以下操作

。。。如果 foo是個陣列,就嘗試返回bar成員,如果不存在的話,往下繼續

。。。如果foo是個物件,會嘗試返回bar屬性,如果不存在的話,往下繼續

。。。會嘗試執行bar方法,如果不存在的話,往下繼續

。。。會嘗試執行getbar方法,如果不存在的話,往下繼續

。。。會嘗試執行isbar方法,如果不存在的話,返回null

for['bar'] 就簡單很多了 for必須是個陣列,嘗試返回bar成員,如果不就返回null

twig定義了有一些全域性變數

具體參見set標籤

%}

變數可以被過濾器修飾。過濾器和變數用(|)分割開。過濾器也是可以有引數的。過濾器也可以被多重使用。

下面這例子就使用了兩個過濾器。

}
striptas表示去除html標籤,title表示每個單詞的首字母大寫。更多過濾器參見我部落格

過濾器也可以用在**塊中,參見 filter標籤

this text becomes uppercase

這個沒什麼好說的,會寫程式的都知道,twig內建了一些函式,參考我的部落格

舉個例子 返回乙個0到3的陣列,就使用 range函式

},

支援for迴圈 和 if/elseif/else結構。直接看例子吧,沒什麼好說的。

包圍的內容會被注釋掉,可以是單行 也可以是多行。

詳見include標籤(我部落格內已經翻譯好哦),會返回經過渲染的內容到當前的模板裡

當前模板的變數也會傳遞到 被include的模板裡,在那裡面可以直接訪問你這個模板的變數。

比如

在 render_box.html 是可以訪問 box變數的

加入其他引數可以使被載入的模板只訪問部分變數,或者完全訪問不到。參考手冊

twig中最有用到功能就是模板繼承,他允許你建立乙個「骨骼模板」,然後你用不同到block來覆蓋父模板中任意到部分。而且使用起來非常到簡單。

我們先定義乙個基本骨骼頁base.html 他包含許多block塊,這些都可以被子模板覆蓋。

我們定義了4個block塊,分別是 block head, block title, block content, block footer 

注意1、block是可以巢狀的。

2、block可以設定預設值(中間包圍的內容),如果子模板裡沒有覆蓋,那就直接顯示預設值。比如block footer ,大部分頁面你不需要修改(省力),但你需要到時候仍可以方便到修改(靈活)

下面我看下 子模板應該怎麼定義。

index

}welcome on my awesome homepage.

注意 必須是第乙個標籤。其中 block footer就沒有定義,所以顯示父模板中設定的預設值

如果你需要增加乙個block的內容,而不是全覆蓋,你可以使用 parent函式

...

}

extends標籤只能有乙個,所以你只能有乙個父模板,但有種變通到方法來達到重用多個模板到目的,具體參見手冊的use標籤

主要是幫助轉義 尖括號等  <, >,  &,  "  可以有兩種辦法。一種是用標籤,另一種是使用過濾器。其實twig內部就是呼叫 php 的htmlspecialchars 函式

}

} everything will be automatically escaped in this block

因為}還可以使用 raw 標籤和raw 過濾器,詳細參考手冊

巨集有點類似於函式,常用於輸出一些html標籤。

這裡有個簡單示例,定義了乙個輸出input標籤的巨集。

巨集引數是沒有預設值的,但你可以通過default過濾器來實現。

一般來說巨集會定義在其他到頁面,然後通過import標籤來匯入,

}

你也可以只匯入乙個檔案中部分巨集,你還可以再重新命名。

username

}password}}

上面的**表示 從forms.html中匯入了 input 和 textarea巨集,並給input重新命名為input_field。

twig允許你在任何地方使用表示式,他的規則和php幾乎一模一樣,就算你不會php 仍然會覺得很簡單。

最簡單的有 

字串:「hello world」  或者 'hello world'  

數字:42 或者 42.33

陣列:['a','b','c']

雜湊: 其中keys 可以不要引號 也可以是數字 還可以是乙個表示式,比如    

邏輯: true 或者 false

最後還有null

你可以巢狀定義

] %}
運算子

包括數字運算+ - * /  %(求餘數)  //(整除) **(乘方)

}=6

}=8

邏輯運算 and or  not

比較運算 > < >= <= == !=

包含運算 in 以下的**會返回 true

}

}

測試運算 is 這個不用多說 直接看**
}

其他操作符

.. 建立乙個指定開始到結束的陣列,他是range函式的縮寫,具體參看手冊

},

| 使用乙個過濾器

}

~ 強制字串連線
}
?:  三元操作符
}
. 得到乙個物件的屬性,比如以下是相等的。

}

}

你還可以在乙個字串內部插入乙個表示式,通常這個表示式是變數。 格式是 #

baz" }}

baz" }}

和 php一樣,在twig模板標籤之後的第乙個換行符會被自動刪掉,其餘的空白(包括 空格 tab 換行等)都會被原樣輸出。

使用spaceless標籤就可以刪除這些html標籤之間的空白

foo

使用-操作符,可以很方便的刪除twig標籤之前或之後與html標籤之間的空白。

}

}

2018 1 13 Twig模板引擎快速入門

layout title date author desc in head post twig模板引擎快速入門 2018 01 13 13 00 02 0800 南丞 模板引擎 這裡特指用於web開發的模板引擎 是為了使使用者介面與業務資料 內容 分離而產生的,它可以生成特定格式的文件,用於 的模板...

symfony中twig的模板過濾器

變數可以被過濾器修飾。過濾器和變數用 分割開。過濾器也是可以有引數的。過濾器也可以被多重使用。date過濾器 1.1版本新增時區支援,1.5版本增加了預設的日期格式。格式化時間,這個過濾器和php的date函式無限類似,可處理與 strtotime 相容的字串,或 datetime dateinte...

go基礎入門快速學習手冊

go 入門安裝與hello world gopath goroot詳解 go import匯入包詳解 go 加速配置詳解 go modules管理包工具詳解 go 基本型別介紹 go 常量詳解 go 變數詳解 go 運算子詳解 go 指標概念 go 指標使用 go 流程控制詳解 go array陣列...