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

Twig模板include语句传入对象报array expected错误如何解决?

问题原因

Twig 的 include 语句中 with 关键字仅支持传入数组类型的上下文参数,原生不允许直接传入对象,所以使用对象数组时会抛出 array expected, got Object 错误。

解决方案
  • 方案1:PHP 端预处理(最推荐)
    在把 things 变量传递给 Twig 模板前,提前将数组内的所有对象转为关联数组。自定义类可新增 toArray() 方法封装属性转换逻辑,通用对象可直接用 get_object_vars() 或者序列化反序列化的方式完成转换:
// 示例:PHP端转换对象数组为二维数组
$things = array_map(function($item) {
    // 通用对象转关联数组,不包含私有属性的话也可以用 get_object_vars($item)
    return json_decode(json_encode($item), true);
}, $things);

// 再将转换后的$things传给Twig模板

原模板中的遍历逻辑不需要做任何修改即可正常运行。

  • 方案2:Twig 模板内手动拼装上下文数组
    如果不方便修改 PHP 端代码,可在 include 时手动把模板需要用到的对象属性拼装成数组传入:
{% for thing in things %}
   {{ include 'template.html' with {
       id: thing.id,
       title: thing.title,
       // 其他 template.html 需要用到的属性,按需添加
   } only }}
{% endfor %}
  • 方案3:对象类实现 ArrayAccess 接口
    如果该类对象需要在多个 Twig 场景中被当作数组使用,可以给对象所属的类实现 PHP 内置的 ArrayAccess 接口,实现对应方法后 Twig 会将该类实例识别为可数组访问的类型,不会再触发类型校验错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 04:15:05