流程控制
if 语句
if语句在twig中的作用如同if语句在PHP中的一样。
1.你可以通过下面这个简单的例子来判断表达式的结果是否正确。
{% if online == false %}
<p>Our website is in maintenance mode. Please, come back later.</p>
{% endif %}
2.你也可以测试数组是否为空
{% if users %}
<ul>
{% for user in users %}
<li>{{ user.username|e }}</li>
{% endfor %}
</ul>
{% endif %}
也可以用作判断变量是否定义
3.如果有更多的分支条件elseif和else在PHP中的一样被使用,你可以运用更复杂的表达式如下:
{% if kenny.sick %}
Kenny is sick.
{% elseif kenny.dead %}
You killed Kenny! You bastard!!!
{% else %}
Kenny looks okay — so far
{% endif %}
判断表达式正确与否的规则与PHP里面一样。这里有一个边缘条件规则:
值 | 逻辑判断 |
---|---|
empty string | false |
numeric zero | false |
whitespace-only string | true |
empty array | false |
null | false |
non-empty array | true |
object | true |
4.逻辑运算
运算符 | 描述 |
---|---|
and | 与 |
or | 或 |
for语句
遍历序列中每个个体,比如:
<h1>Members</h1>
<ul>
{% for user in users %}
<li>{{ user.username|e }}</li>
{% endfor %}
</ul>
循环变量
变量 | 描述 |
---|---|
loop.index | 当前循环的次数(从1开始) |
loop.index0 | 当前循环的次数 (从0开始) |
loop.revindex | 当前循环剩余次数(从1开始) |
loop.revindex0 | 当前循环剩余次数(从0开始) |
loop.first | 当第一次循环的时候返回true |
loop.last | 当最后一次循环的时候返回true |
loop.length | 循环的总数 |
loop.parent | 被循环的数组 |
添加一个条件
跟PHP不一样,在循环内部不支持break和continue语句,你只能通过过滤器去跳过一些循环,就像这样
<ul>
{% for user in users if user.active %}
<li>{{ user.username|e }}</li>
{% endfor %}
</ul>
<ul>
{% for user in users if user.active %}
<li>{{ user.username|e }}</li>
{% endfor %}
</ul>
else 分支
如果 users是个空数组就会输出no user found 。
<ul>
{% for user in users %}
<li>{{ user.username}}</li>
{% else %}
<li><em>no user found</em></li>
{% endfor %}
</ul>
<ul>
{% for user in users %}
<li>{{ user.username}}</li>
{% else %}
<li><em>no user found</em></li>
{% endfor %}
</ul>
按keys循环
<h1>Members</h1>
<ul>
{% for key in users|keys %}
<li>{{ key }}</li>
{% endfor %}
</ul>
<h1>Members</h1>
<ul>
{% for key in users|keys %}
<li>{{ key }}</li>
{% endfor %}
</ul>
按keys, values循环
<h1>Members</h1>
<ul>
{% for key, user in users %}
<li>{{ key }}: {{ user.username|e }}</li>
{% endfor %}
</ul>
<h1>Members</h1>
<ul>
{% for key, user in users %}
<li>{{ key }}: {{ user.username|e }}</li>
{% endfor %}
</ul>
按子集合循环
<h1>Top Ten Members</h1> <ul> {% for user in users|slice(0, 10) %} <li>{{ user.username|e }}</li> {% endfor %} </ul>