Symfony/yaml是否支持在yaml中使用别名作为键名?

3

我一直在尝试使用symfony/yaml(v4.4.0)和cakephp3读取以下yaml文件,但是我遇到了以下错误。

Reference "aaa" does not exist in "path to yml" at line xx (near "*aaa:").
Symfony\Component\Yaml\Exception\ParseException

我希望以后可以使用'aaa'作为键。
使用“* aaa:”无效,而使用“1:”有效。
基本上,是否可能在yaml文件中使用键的别名?

以下是yaml文件内容。

aaa: &aaa 1
bbb: &bbb 2
ccc: &ccc 3

*aaa: # <- this doesn't work and works with '1:'
  - *bbb
  - *ccc

将来,请提供实际的错误信息,而不仅仅说“它不起作用”。 - flyx
谢谢您的建议。我已经添加了细节。 - Uske
这是Symfony的YAML解析器中的一个错误,您需要向他们提交问题以获得修复。在这里我们无能为力。 - flyx
1个回答

0

对于一般符合规范的 YAML 解析器

你需要在:前面加一个空格。

aaa: &aaa 1
bbb: &bbb 2
ccc: &ccc 3

*aaa :
  - *bbb
  - *ccc

YAML 1.2 允许 : 成为锚点的一部分,因此,如果 : 相邻于别名,则该行将不会被解析为隐式键(因为它成为别名的一部分)。 这已经在 YAML 核心邮件列表上 讨论过

对于 Symfony

似乎 Symfony 将 *aaa: 解析为别名 *aaa,并将 : 解析为值指示符。虽然这是规范的违规,但这不应该困扰我们,因为根据邮件列表上的说法,这更像是规范上的疏忽。但是,Symfony 在这里无法解析别名,你只能为此提交问题。


那么你的问题不是关于YAML,而是关于一个特定实现中的bug。这段代码是有效的YAML,可以通过PyYAMLNimYAML(我的工作)在线检查。 - flyx
很抱歉没有先写详细信息。这似乎是symfony/yaml的一个bug。 - Uske

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接