Twig在Symfony 7.4.21中默认集成,要求PHP≥8.2并启用intl、mbstring、xml、ctype、iconv、json扩展;项目创建即含twig-bundle,可通过console命令验证版本与配置,控制器用render()渲染模板,支持自定义Twig函数/过滤器。

确认PHP环境满足Twig运行要求
Symfony 7.4.21 内置默认使用 Twig 作为模板引擎,但 Twig 本身对 PHP 版本和扩展有明确依赖。必须确保 PHP ≥ 8.2,且已启用 intl、mbstring、xml、ctype、iconv、json 等扩展——这些不仅是 Symfony 所需,也是 Twig 渲染国际化内容、处理字符串编码、解析 JSON 数据的基础。
验证方式:
- 运行
php -v确认版本为 8.2.x 或更高(如 8.2.25) - 运行
php -m | grep -E "(intl|mbstring|xml|ctype)"检查关键扩展是否已加载 - 若缺失 intl,常见于 Ubuntu/Debian 系统:执行
sudo apt install php8.2-intl并重启 PHP-FPM(sudo systemctl restart php8.2-fpm)
创建项目时自动包含Twig组件
使用 Composer 创建 Symfony 7.4.21 项目时,symfony/skeleton 默认已预装 twig-bundle 和 twig 核心库,无需手动 require。命令如下:
composer create-project symfony/skeleton:^7.4.21 myapp
进入项目后可快速验证:
-
composer show twig/twig—— 应显示 Twig 4.x 版本(Symfony 7.4 兼容 Twig 4.0+) -
php bin/console about—— 查看 “Twig version” 行确认已加载 -
php bin/console debug:twig—— 列出所有可用 Twig 函数、过滤器和全局变量
在控制器中渲染Twig模板
Symfony 默认控制器返回 Response 对象,配合 render() 方法即可调用 Twig:
例如,在 src/Controller/DefaultController.php 中:
public function index(): Response
{
return $this->render('default/index.html.twig', [
'title' => '欢迎使用 Symfony 7.4.21',
'users' => ['Alice', 'Bob', 'Charlie'],
]);
}
对应模板路径为 templates/default/index.html.twig,内容可直接使用 Twig 语法:
<h1>{{ title }}</h1>
<ul>
{% for user in users %}
<li>{{ user|capitalize }}</li>
{% endfor %}
</ul>
注意:templates/ 是 Symfony 默认模板根目录,无需额外配置;所有 .html.twig 文件会自动启用 HTML 转义,保障 XSS 安全。
自定义Twig函数或过滤器(按需扩展)
如需在模板中调用业务逻辑(如格式化价格、生成 URL 参数),应通过 Twig 扩展注册,而非在模板里写 PHP 代码:
- 新建类
src/Twig/AppExtension.php,继承Twig\Extension\AbstractExtension - 重写
getFunctions(),返回new \Twig\TwigFunction('price', [$this, 'formatPrice']) - 实现
formatPrice(float $amount): string方法,仅 return 字符串,不 echo - 若返回 HTML(如带标签的徽章),加选项
['is_safe' => ['html']]
完成后,模板中即可使用:{{ 199.99|price }} 或 {{ price(299.5) }},安全且可复用。


















