# Twig, 靈活、快速、安全的PHP模板語言。
**目前還在完善翻譯中,你可以先收藏一波~**
Twig是一款靈活、快速、安全的PHP模板引擎。
-
快速:Twig將模板編譯為純粹的,最優化的PHP代碼。它的開銷與常規的PHP代碼相比,已經降到了極低。
-
安全:Twig擁有沙盒模式,用于評估未受信任的模板代碼。這使得Twig可以用于允許用戶自行修改模板設計的應用程序中。
-
靈活:Twig由一個靈活的詞法分析器和解析器驅動。這使得開發者可以自定義標簽和過濾器,并創建自己的DSL。
---
##為何會有這款模板引擎?
在為PHP帶來模板引擎時,許多人會告訴你PHP本身就是一款模板引擎啊。雖說一開始PHP是作為一門模版語言使用,但它并不像近年來的任何模板引擎一樣發展。事實上,他不支持現代模板引擎的許多特性:
* **簡潔**:PHP語言在涉及到輸出轉義時冗長而可笑。
~~~
<?php echo $var ?>
<?php echo htmlspecialchars($var, ENT_QUOTES, 'UTF-8') ?>
~~~
相比之下,Twig擁有非常簡潔的語法,它使得模版更具可讀性:
~~~
{{ var }}
{{ var|escape }}
{{ var|e }} {# shortcut to escape a variable #}
~~~
* **模版導向語法**:Twig為通用的模式提供了快捷方式,例如在遍歷一個空數組時,會顯示一個默認文本:
~~~
{% for user in users %}
* {{ user.name }}
{% else %}
No users have been found.
{% endfor %}
~~~
* **全功能**:Twig為你提供了輕松構建強大模版的一切:多重繼承,塊,自動化輸出轉義,以及其他許多特性:
~~~
{% extends "layout.html" %}
{% block content %}
頁面內容...
{% endblock %}
~~~
* **易學**:Twig的語法非常易學,即使是網頁設計師也能毫無阻礙地快速完成工作:
當然,PHP也是許多模板引擎項目中用到的語言。但它們中的大多數仍是使用PHP 4開發的,并且不支持最佳的web開發實踐:
* **可擴展性**:即使是在最復雜的情況下,Twig也足夠靈活滿足你的需求。得益于開放的體系,你可以實現你自己的語言結構(標簽、過濾器、函數、甚至運算符等)來創建你自己的DSL。
* **已被單元測試**:Twig經歷過完整的單元測試,它是穩定的,能用于大型項目的。
* **文檔**:Twig擁有完整的文檔,以及專用的在線手冊,當然還有完善的API文檔。
* **安全**:說到安全,Twig擁有一些獨特的特性:
* **自動輸出轉義**:為安全考慮,你可以全局啟用自動輸出轉義,或者只對某個塊啟用:
~~~
{% autoescape true %}
{{ var }}
{{ var|raw }} {# var won't be escaped #}
{{ var|escape }} {# var won't be doubled-escaped #}
{% endautoescape %}
~~~
* **沙盒**:Twig可以在沙盒環境下評估任意模版,用戶只能訪問一組有限的標簽,過濾器,以及由開發者定義的對象方法。沙盒可以全局地或者單獨對某些模版啟用:
`{{ include('page.html', sandboxed = true) }}`
* **清晰的錯誤信息**:無論何時你在模版中遇到了語法錯誤,Twig都會輸出帶有出錯的文件名和行號的幫助信息。它非常有助于調試。
* **快速**:Twig的目標之一就是盡可能地快。為了盡可能實現最佳的速度,Twig將模版編譯成極致優化的PHP代碼。它的開銷與常規的PHP代碼相比,已經降到了極低。
##Twig的背后
Twig 由[Fabien Potencier](http://http://fabien.potencier.org/)為你呈現,他是 [Symfony framework](http://symfony.com/)的作者。Twig以BSD許可協議發布。
- 首頁
- 目錄
- 介紹
- 安裝
- 面向模板設計師
- 面向開發者
- 擴展 Twig
- Twig的內部構建
- 棄用的特性
- 使用技巧
- 代碼規范
- 標簽 tags
- autoescape
- block
- do
- embed
- extends
- filter
- flush
- for
- from
- if
- import
- include
- macro
- sandbox
- set
- spaceless
- use
- verbatim
- 過濾器
- abs
- batch
- capitalize
- convert_encoding
- date
- date_modify
- default
- escape
- first
- format
- join
- json_encode
- keys
- last
- length
- lower
- merge
- nl2br
- number_format
- raw
- replace
- reverse
- round
- slice
- sort
- split
- striptags
- title
- trim
- upper
- url_encode
- 函數
- attribute
- block
- constant
- cycle
- date
- dump
- include
- max
- min
- parent
- random
- range
- source
- template_from_string
- 測試
- constant
- defined
- divisibleby
- empty
- even
- iterable
- null
- odd
- sameas