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
相关产品推荐
相关产品推荐

