twig条件判断使用{% if %}{% elseif %}{% else %}语法,自动转义、支持空值判断、多分支、测试器和过滤器,适合symfony视图逻辑控制。

Twig条件判断用 {% if %}、{% elseif %}、{% else %} 实现,语法简洁、安全,默认自动转义变量,适合在Symfony项目中做视图层逻辑控制。
基础if写法:判断真假或存在性
Twig中,if会自动把空字符串、null、空数组、false 视为假值。无需显式写 == true 或 is defined(除非特殊需要)。
-
{% if user %}—— 判断变量是否已定义且非空(常用) -
{% if user.active %}—— 判断对象属性是否存在且为真 -
{% if items|length > 0 %}—— 显式检查数组长度(更直观) -
{% if users is empty %}—— 等价于not users,语义更清晰
多分支判断:elseif和else组合
支持链式条件,结构清晰,适合处理角色权限、状态流转等场景。
{% if user.role == 'admin' %}...{% elseif user.role == 'editor' %}...{% else %}...{% endif %}- 注意:Twig不支持
else if连写,必须用elseif(单个词,无空格) - 比较运算符直接使用
==、!=、、<code>>=等,无需PHP风格的===
配合过滤器与测试器增强判断能力
Twig提供内置测试器(is)和过滤器,让条件更精准:
-
{% if name is defined %}—— 确保变量存在,避免未定义报错 -
{% if value is sameas(true) %}—— 严格类型比较(区分1和true) -
{% if email|lower matches '/^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}$/' %}—— 正则匹配邮箱格式 {% if user.createdAt|date('Y') —— 结合日期过滤器做时间判断
嵌套与简化写法注意事项
条件可嵌套,但建议保持层级浅(最多两层),否则影响可读性。复杂逻辑尽量移到控制器或服务中处理。
- 三元简写不支持原生
?:,但可用{% if cond %}a{% else %}b{% endif %}替代 - 多个条件用
and/or连接:{% if user and user.isVerified and user.role != 'banned' %} - 括号可提升可读性:
{% if (user.role == 'admin') or (user.permissions|length > 5) %}











