【问题标题】:Is it possible to use alias for keys in yaml with symfony/yaml?是否可以通过 symfony/yaml 为 yaml 中的键使用别名?
【发布时间】:2020-03-25 10:41:23
【问题描述】:

我一直在尝试使用 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

【问题讨论】:

  • 对于未来,请给出实际的错误信息,而不是仅仅说“它不起作用”。
  • 感谢您的建议。我已经添加了详细信息。
  • 这是 Symfony 的 YAML 解析器中的一个错误,您需要向他们提交问题以修复它。我们在这里无能为力。

标签: symfony cakephp yaml


【解决方案1】:

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

你需要在:之前写一个空格。

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

*aaa :
  - *bbb
  - *ccc

YAML 1.2 允许 : 成为锚点的一部分,因此,如果 : 与别名相邻(因为它成为别名的一部分),则该行将不会被解析为隐式键。 这是discussed on the YAML core mailing list

对于 Symfony

似乎 Symfony 将 *aaa: 解析为别名 *aaa,并将 : 作为值指示符。虽然这是违反规范的,但它不应该打扰我们,因为根据邮件列表,这更像是规范中的疏忽。但是,Symfony 无法在此处解析别名,对此您无能为力,只能为它提交问题。

【讨论】:

  • 那么您的问题不是关于 YAML,而是关于特定实现中的错误。此代码是有效的 YAML,可以使用 PyYAMLNimYAML 在线检查(我的工作)。
  • 很抱歉没有先写详细信息。这似乎是 symfony/yaml 的错误..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-13
  • 1970-01-01
  • 2017-04-03
  • 1970-01-01
相关资源
最近更新 更多