Twig 的 for 循环用于遍历数组、对象或数字范围,语法简洁且自动处理空值;支持键值对遍历、索引信息(如 loop.index)、数字范围(0..9)、条件过滤(if)及 else 分支;允许多重并列或嵌套循环,但需确保数据源独立可为空。

Twig 的 for 循环是模板中遍历数组、对象或数字范围的核心语法,写法简洁且语义清晰,不需要手动管理索引或计数器。
基础 for 循环写法
最常用的形式是遍历一个数组或集合,语法为:{% for item in items %}...{% endfor %}。其中 items 是从 PHP 控制器传入的变量(如数组或 Doctrine 查询结果),item 是当前迭代项的别名。
- 支持直接输出:
{{ item.name }}或{{ item }}(若为标量) - 自动处理空数组:若
items为空或未定义,循环体不会执行,也不会报错 - 必须配对闭合:漏写
{% endfor %}会导致模板编译失败
遍历键值对与索引信息
当需要同时访问键名和值,或获取循环位置(如序号、是否首尾),Twig 提供内置变量:
{% for key, value in data %}{{ key }}: {{ value }}{% endfor %}-
{% for user in users %}{{ loop.index }}. {{ user.name }}{% endfor %}→loop.index从 1 开始计数 -
loop.first、loop.last、loop.length等可直接在循环体内使用
数字范围与条件过滤
Twig 支持用 .. 生成连续整数序列,也允许在循环中嵌入 if 进行筛选:
- 生成 0 到 9:
{% for i in 0..9 %}{{ i }}{% endfor %} - 只显示活跃用户:
{% for user in users if user.active %}{{ user.name }}{% else %}No active users{% endfor %} -
else分支在循环无匹配项时触发(注意:仅对带if的循环有效)
嵌套循环与独立并列循环
多个 for 可以并列书写,互不影响;若需嵌套(如分类下展示文章),直接缩进即可:
- 并列写法(推荐用于不同数据源):
{% for goal in goals %}...{% endfor %}{% for task in tasks %}...{% endfor %} - 嵌套写法:
{% for category in categories %}{{ category.name }}
{% for post in category.posts %}{{ post.title }}
{% endfor %}{% endfor %} - 避免逻辑耦合:不要依赖“外层循环有数据,内层才渲染”,应确保每个循环的数据源独立可为空











