1.Twig 简介
Twig作为PHP模板引擎,具有如下特点:
- Fast: Twig compiles templates down to plain optimized PHP code. The overhead compared to regular PHP code was reduced to the very minimum.
- Secure: Twig has a sandbox mode to evaluate untrusted template code. This allows Twig to be used as a template language for applications where users may modify the template design.
- Flexible: Twig is powered by a flexible lexer and parser. This allows the developer to define its own custom tags and filters, and create its own DSL.
2.语法Syntax
参考官方文档:Twig for Template Designers
2.1 常用IDE twig扩展
- Textmate via the Twig bundle
- Vim via the Jinja syntax plugin or the vim-twig plugin
- Netbeans via the Twig syntax plugin (until 7.1, native as of 7.2)
- PhpStorm (native as of 2.1)
- Eclipse via the Twig plugin
- Sublime Text via the Twig bundle
- GtkSourceView via the Twig language definition (used by gedit and other projects)
- Coda and SubEthaEdit via the Twig syntax mode
- Coda 2 via the other Twig syntax mode
- Komodo and Komodo Edit via the Twig highlight/syntax check mode
- Notepad++ via the Notepad++ Twig Highlighter
- Emacs via web-mode.el
2.2 variables 变量
例子
1. {{ foo.bar }}
2. {{ foo['bar'] }}
”{{ }}“为twig中的结构符号,表明显示的内容,例子中第一行将显示foo变量的bar属性内容。除此以外还有包含用于if,for的判断结构”{% %}“和注释的”{# #}“结构。
##控制结构
{% for i in range(0, 3) %}
{{ i }},
{% endfor %}
##注释结构
{# equivalent to the non-working foo.data-foo #}
声明变量
{% set foo = 'foo' %}
{% set foo = [1, 2] %}
{% set foo = {'foo': 'bar'} %}
2.3 Filters
类似于linux命令行中的管道pipe和编程语言(eg.js)的函数链(function chain),twig中也利用“|”符号来链接针对数据流的操作。
1. {{ name|striptags|title }}//removes all HTML tags from the name and title-cases it:
2. {{ list|join(', ') }}//join a list by commas,如果list=['hello',2,3],则结果为"hello,2,3"
3. To apply a filter on a section of code, wrap it in the filter tag:
{% filter upper %}
This text becomes uppercase
{% endfilter %}
twig自身包含了许多filters,也可以自己定义filters:
2.4 函数function
{% for i in range(0, 3) %}
{{ i }},
{% endfor %}
上例中”range”生成从0到3的整数数组,其他函数参见官网
2.5 include其他文件
{{ include('sidebar.html') }}
2.6 模板继承Template Inheritance
twig中最为重要的部分,用类似于类的形式使用模板。
1.定义一个base.html文件,用{% block * %}结构定义四个块。
<!DOCTYPE html>
<html>
<head>
{% block head %}
<link rel="stylesheet" href="style.css" />
<title>{% block title %}{% endblock %} - My Webpage</title>
{% endblock %}
</head>
<body>
<div id="content">{% block content %}{% endblock %}</div>
<div id="footer">
{% block footer %}
© Copyright 2011 by <a href="http://domain.invalid/">you</a>.
{% endblock %}
</div>
</body>
</html>
2.子模版继承base.html,并重新覆写block中的内容
{% extends "base.html" %}
{% block title %}Index{% endblock %}
{% block head %}
{{ parent() }}
<style type="text/css">
.important { color: #336699; }
</style>
{% endblock %}
{% block content %}
<h1>Index</h1>
<p class="important">
Welcome to my awesome homepage.
</p>
{% endblock %}