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

如何创建返回对象/数组而非字符串的Twig宏?

让Twig宏返回对象/数组而非字符串的方法

嘿,你遇到的问题其实是Twig宏的默认行为导致的——默认情况下宏会输出模板里的内容,而不是返回变量。要让它返回对象或数组,只需要用{% return %}标签明确返回你想要的变量就行,我给你改改代码:

修正后的宏与调用示例

首先是调整后的宏代码:

{% macro createObject(input) %}
    {% set output = { 'test': 'Hello world' } %}
    {% set output = output|merge({'disabledLogo': true}) %}
    {# 用return语句返回我们组装好的对象,而不是让宏输出内容 #}
    {% return output %}
{% endmacro %}

然后在模板里调用的时候,就像你原本写的那样,直接把宏的返回值赋值给变量,还能轻松传给JavaScript:

{% set obj = macros.createObject(input) %}
<h2>{{ obj.test }}</h2>

{# 传给JavaScript的话,转成JSON即可 #}
<script>
    const appData = {{ obj|json_encode|raw }};
    console.log(appData.test); // 会输出 "Hello world"
    console.log(appData.disabledLogo); // 输出 true
</script>

几个关键点要注意

  • 如果你不写{% return %},Twig宏执行完会返回空字符串(因为你的宏里没有任何输出内容),这就是为什么你之前拿不到想要的对象。
  • {% return %}可以返回任何Twig支持的类型:数组、对象、字符串、数字都没问题,完全能满足你统一格式给JS调用的需求。
  • 传给JS的时候,一定要用|json_encode把对象转成JSON字符串,再加|raw避免Twig转义HTML实体,这样JS才能直接解析成可用的对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:27:32