Symfony 7.1 的模板过滤器由 Twig 提供,含开箱即用的核心过滤器(如 date、number_format)、需安装 twig/intl-extra 的本地化过滤器(如 format_currency),以及可自定义扩展的过滤器。

在 Symfony 7.1 中,模板过滤器(filters)主要通过 Twig 引擎提供,不是 Symfony 自身直接定义的语法功能,而是由 Twig 扩展机制注入的。你真正要掌握的是如何在 Twig 模板中使用过滤器,以及哪些过滤器是开箱可用、哪些需要额外安装。
Twig 核心过滤器:无需额外安装
Symfony 7.1 默认集成 Twig 3.13+ 或 4.x,自带一批基础过滤器,可直接在模板中使用:
-
date:格式化日期时间,如
{{ post.publishedAt|date('Y-m-d') }} -
number_format:数字千分位与小数控制,如
{{ price|number_format(2, '.', ',') }} - upper / lower / title:字符串大小写转换
- striptags:去除 HTML 标签
-
default:设置默认值,如
{{ user.name|default('Anonymous') }} - json_encode:将变量转为 JSON 字符串(常用于前端传参)
本地化过滤器:需安装 twig/intl-extra
Symfony 7.1 默认不启用 ICU 本地化能力。若需按语言/地区格式化货币、日期、数字或翻译国家名等,必须安装扩展:
- 运行
composer require twig/intl-extra - Symfony 项目会自动注册(因已含
twig/extra-bundle),无需手动配置 - 之后即可使用如
{{ 1234.56|format_currency('EUR', 'auto') }}或{{ now|format_datetime(locale='zh_CN') }}
自定义过滤器:按需扩展模板能力
当内置过滤器不够用时,可创建自己的 Twig 扩展类:
- 在
src/Twig/下新建类,继承Twig\Extension\AbstractExtension - 重写
getFilters(),返回new Twig\TwigFilter('my_filter', [$this, 'doSomething']) - 方法支持参数、安全选项(如
is_safe=['html'])和环境访问(needs_environment=true) - Symfony 7.1 默认启用自动服务发现,只要类在
src/Twig/且实现扩展接口,即自动加载
注意事项与常见问题
使用过滤器时要注意几点实际限制:
- 过滤器只能作用于表达式结果,不能用于标签内部(如
{% if foo|upper == 'YES' %}合法,但{% for item in list|sort %}中sort是函数,不是过滤器) - 链式调用顺序从左到右,
{{ value|trim|upper|e }}先去空格、再大写、最后转义 - 部分过滤器(如
format_currency)依赖系统 ICU 库或symfony/intl数据包,若报错“Unknown formatter”,检查是否装全依赖 - 开发环境建议开启 Twig 缓存调试模式(
twig.debug: true),便于定位过滤器未注册问题


















