twig过滤器是模板中处理变量的快捷方式,用“|”连接,支持链式调用和参数传递;内置字符串、数字、数组及安全类过滤器,symfony还扩展了humanize等特有功能;可自定义过滤器,需创建扩展类并标记twig.extension标签,且须注意输出安全与转义规则。

Twig过滤器是模板中处理变量内容的快捷方式,用竖线 | 连接,写在变量后面,语法简单、语义清晰,比如 {{ title|upper }} 把标题转成大写。
基础用法:变量后加竖线+过滤器名
过滤器作用于单个变量或表达式结果,支持链式调用,也支持传参:
-
{{ user.name|lower|trim }}:先转小写,再去除首尾空格 -
{{ post.publishedAt|date('Y-m-d') }}:按指定格式输出日期 -
{{ content|truncate(100, true, '…') }}:截取前100字符,保留完整词,结尾加省略号
常用内置过滤器速查
Symfony 默认集成 Twig 原生过滤器,并扩展了业务相关功能:
-
字符串类:
upper、lower、title、striptags、slug、truncate -
数字类:
number_format(如{{ price|number_format(2, ',', ' ') }}) -
数组/集合类:
length、first、last、sort、filter(支持箭头函数)、map -
安全与编码:
escape(默认 html)、raw(跳过转义,慎用) -
Symfony 特有:
humanize(user_email→User email)、emojify(:smile:→ ?)、form_encode_currency(防 XSS 的货币格式化)
自定义过滤器:三步就能用
当内置不够用时,可快速添加自己的过滤器:
- 创建 Twig 扩展类,继承
AbstractExtension - 在
getFilters()中返回TwigFilter实例,或用#[AsTwigFilter]注解(Symfony 5.3+) - 在服务配置中标记
twig.extension标签(如App\Twig\AppExtension: tags: ['twig.extension'])
例如定义一个价格过滤器:{{ 1299.99|price_format('EUR') }},背后只需一个 PHP 方法做 money_format 或 number_format 处理。
注意过滤器执行时机和安全性
过滤器在模板渲染阶段运行,不改变原始数据;所有输出默认经过 HTML 转义,若需输出 HTML 内容,必须显式声明 is_safe => ['html'],否则会被自动转义。像 form_encode_currency 这类 Symfony 提供的过滤器已内置安全策略,比手写 raw 更可靠。











