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

Magnolia CMS中如何实现多文件引用?

问题:YAML配置中如何引用多个包含不同字段类型的文件?

我需要在SampleDialog.yaml中引用多个包含不同字段类型的文件。目前单文件引用的配置可以正常加载目标文件中的所有字段:

label: Sample
form:
  properties:!include:/sample-files/file1.yaml

但尝试多文件引用时无法正常工作,我已经试过以下几种格式:

# 格式1:用数组包裹
label: Sample
form:
  properties:
    - !include:/sample-files/file1.yaml
    - !include:/sample-files/file2.yaml

# 格式2:直接并列引用
label: Sample
form:
  properties:
    !include:/sample-files/file1.yaml
    !include:/sample-files/file2.yaml

# 格式3:带引号的并列引用
label: Sample
form:
  properties:
    !include: "/sample-files/file1.yaml"
    !include: "/sample-files/file2.yaml"

请问有解决办法吗?


解决办法

你的核心问题在于:properties应该是一个对象而非数组,但你尝试的格式要么把它变成了数组,要么因为YAML的键唯一性规则导致后面的引用覆盖了前面的。针对不同的YAML解析器,有两种可行方案:

方案1:使用YAML合并键(<<:)合并对象

如果你的YAML解析器支持YAML 1.2的合并键特性,可以通过<<:将多个文件中的对象合并到properties下:

label: Sample
form:
  properties:
    <<: !include /sample-files/file1.yaml
    <<: !include /sample-files/file2.yaml

这种写法会把两个文件中的字段合并成一个对象,后面文件中的重复字段会覆盖前面的。

方案2:使用数组形式的!include(部分解析器支持)

部分支持!include扩展的工具(比如某些前端构建工具、配置框架)允许你传入一个文件路径数组,自动合并多个文件的内容:

label: Sample
form:
  properties: !include [/sample-files/file1.yaml, /sample-files/file2.yaml]

为什么之前的格式无效?

  • 格式1:用-包裹后,properties变成了数组,但你需要的是键值对形式的对象,所以无法正确加载字段。
  • 格式2/3:YAML中同一个层级下的重复指令(这里!include作为特殊标签)会被覆盖,最终只会生效最后一个引用的文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 06:07:16