答案 flyx 为您提供了正确的解决方案,但并未表明您在尝试寻找解决方案时做错了什么,并且没有解决问题,因为您在基于 PHP 的 YAML 解析器中遇到了限制symfony3 正在使用。
这个:
calls:
- [ setReader, ["@sonata.admin.audit.manager", "@doctrine.orm.default_entity_manager"]]
setTemplates:
- show: XxxBundle:PmodOrder:show.html.twig
- edit: XxxBundle:PmodOrder:edit.html.twig
- create: XxxBundle:PmodOrder:create.html.twig}]]
有问题。您首先将映射键calls 的值作为一个序列,方法是在以[ setReader, ["@sonat... 开头的(流样式)序列元素之前添加一个破折号(-)。然后在相同的缩进级别,你有一个映射键setTemplates,这在 YAML 中是不允许的。尾随 }]] 也应删除,因为它们不是映射值 XxxBundle:PmodOrder:create.html.twig}]] 的一部分
您通过插入额外的破折号(并删除了尾随的}]])修复了第二个示例中的语法错误,但没有注意到您实际上通过进行映射删除了一个完整节点
setTemplates, [{show: XxxBundle:PmodOrder:show.html.twig, edit: XxxBundle:PmodOrder:edit.html.twig, create: XxxBundle:PmodOrder:create.html.twig}]]
作为calls 值的序列元素,而不是作为calls 值的序列的序列元素。
这个问题来自于试图同时重写太多东西和/或从错误的结尾开始。
在 YAML 中,如果你想将流样式节点重写为块样式,你应该从顶层开始向内工作,这样你就可以一步一步地这样做。
这是因为flow style可以出现在自身和block style中,但是block style不能出现在flow style中,只能出现在其他block style中。
因此,您重写的第一步应该是采用最外层的流式序列并重写它(我使用 2 个空格缩进,因为如果考虑行长,这似乎更合适):
calls:
- [ setReader, ["@sonata.admin.audit.manager", "@doctrine.orm.default_entity_manager"]]
-
- setTemplates
- [{show: XxxBundle:PmodOrder:show.html.twig, edit: XxxBundle:PmodOrder:edit.html.twig, create: XxxBundle:PmodOrder:create.html.twig}]
您可以,但不是必须,将块样式序列中的块样式序列的第一个元素与父级放在同一行,但是 symfony3 使用的 YAML 解析器不允许这样做。一般程序是:
- 将最外层的
[ 替换为-
- 将任何不在嵌套节点内的
, **(在不属于标量字符串的[] 或{} 之间)替换为在具有相同缩进的换行符上的-如第 1 步中的 -。
- 删除最后的
]
如果您使用的是 PHP,请将第一个 - 移动到新行,因为 PHP 解析器的限制。
这并没有减少多少行长度,所以在下一层重复上述步骤,这是一个只有一个元素的序列:
calls:
- [ setReader, ["@sonata.admin.audit.manager", "@doctrine.orm.default_entity_manager"]]
-
- setTemplates
-
- {show: XxxBundle:PmodOrder:show.html.twig, edit: XxxBundle:PmodOrder:edit.html.twig, create: XxxBundle:PmodOrder:create.html.twig}
现在攻击下一个级别,即映射。具体步骤如下:
- 去掉最外层的
{
- 替换任何不在嵌套节点内的
, **(在不属于标量字符串的[] 或{} 之间),并对齐键(: 之前的部分在换行符上与步骤 1 中的键具有相同的缩进。
- 删除最后的
}
- 如果任何键值对都被引用并且仅由冒号 (
:) 而不是带有空格的冒号分隔,请在冒号后插入一个空格,并在可能的情况下删除引号。
这最后一步不会影响您的代码,但对于更多 JSON(如 YAML)可能是必需的。
执行这些步骤可以获得:
calls:
- [ setReader, ["@sonata.admin.audit.manager", "@doctrine.orm.default_entity_manager"]]
-
- setTemplates
-
- show: XxxBundle:PmodOrder:show.html.twig
edit: XxxBundle:PmodOrder:edit.html.twig
create: XxxBundle:PmodOrder:create.html.twig
YAML 在每一步都给出相同的加载结果。在[ setReader... 部分应用相同的步骤,您就完成了:
calls:
-
- setReader
-
- "@sonata.admin.audit.manager"
- "@doctrine.orm.default_entity_manager"
-
- setTemplates
-
- show: XxxBundle:PmodOrder:show.html.twig
edit: XxxBundle:PmodOrder:edit.html.twig
create: XxxBundle:PmodOrder:create.html.twig
如果你不能用 symfony3 检查每一步,你可以用PHP based YAML checker/converter 检查每一步。它不是目前最好的解析器,但至少它有与 symfony3 使用的相同的限制。