You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向assets函数内部的Twig宏传递动态变量?

Twig宏向asset函数传动态变量的实现方案

完全可以向Twig宏内的asset函数传递动态变量,原有代码无法运行是存在三处语法/逻辑错误:

  • 错误1:Twig的输出分隔符{{ }}不支持嵌套使用。你在{{ asset(...) }}的表达式内部,给变量image额外套了一层{{ }},会直接触发Twig解析错误。
  • 错误2:宏调用语法未闭合。你写的调用代码{{ macros.card('questions.svg'}}末尾缺少匹配的右圆括号,属于基础语法错误。
  • 错误3:文件后缀重复拼接。你调用宏时传入的参数已经带了.svg后缀,宏内部拼接路径时又追加了一次.svg,最终生成的资源路径会变成assets/images/questions.svg.svg,导致资源加载404。

正确写法

你可以根据自己的传参习惯二选一:

方案1:宏内部统一拼接.svg后缀

适合所有卡片svg资源都在同一路径、后缀统一的场景,调用时只需要传文件名主体:

{# 宏定义 #}
{% macro card(image) %}
    <div class="card">
        <img src="{{ asset('assets/images/' ~ image ~ '.svg') }}" alt="" />
    </div>
{% endmacro %}

{# 宏调用 #}
{{ macros.card('questions') }}

方案2:调用时传入完整文件名

适合需要灵活传入不同后缀、不同子路径资源的场景:

{# 宏定义 #}
{% macro card(image) %}
    <div class="card">
        <img src="{{ asset('assets/images/' ~ image) }}" alt="" />
    </div>
{% endmacro %}

{# 宏调用 #}
{{ macros.card('questions.svg') }}

核心规则:Twig中~是原生字符串拼接运算符,在{{ }}包裹的Twig表达式环境里,变量可以直接引用,不需要额外套{{ }}分隔符。

内容的提问来源于stack exchange,提问作者Lukas Hillebrand

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 14:24:26