# 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