【问题标题】:Symfony YAML format conversion: "calls" with string paramsSymfony YAML 格式转换:带有字符串参数的“调用”
【发布时间】:2016-08-12 07:19:59
【问题描述】:

我要转换的服务定义示例:

MyService:
    class: MyClass
    calls:
        - [add, ["%param1%", "%param2%"]]
        - [add, ["%param3%", "%param4%"]]

然后编译为:

$instance->add('param1', 'param2');
$instance->add('param3', 'param4');

根据我的问题#38822898我尝试下一个:

MyService:
    class: MyClass
    calls:
        -
            - add
            -
                - "%param1%"
                - "%param2%"

            - add
            -
                - "%param3%"
                - "%param4%"

然后编译为:

$instance->add('param1', 'param2');

那么,第二个 YAML 示例中的问题在哪里?

UPD#1

根据我之前的问题,下一个 YAML 示例也不会编译为两次调用“add”方法,只有一次:

MyAnotherService:
    class: MyAnotherClass
    factory:
        - MyFactoryClass
        - create
    calls:
        -
            - add
            -
                - >-
                    @=service('AnotherService1').create(
                        service('AnotherService2'),
                        service('AnotherService3')
                    )

            - add
            -
                - >-
                    @=service('AnotherService1').create(
                        service('AnotherService3'),
                        service('AnotherService4')
                    )

编译为:

$instance->add($this->get("AnotherService1")->create($this->get("AnotherService2"), $this->get("AnotherService3")));

【问题讨论】:

    标签: php symfony format yaml config


    【解决方案1】:

    您的扩展缺少-,应该是:

    MyService:
        class: MyClass
        calls:
            -
                - add
                -
                    - "%param1%"
                    - "%param2%"
            -            # < this one is missing
                - add
                -
                    - "%param3%"
                    - "%param4%"
    

    在您的“重写”中,两个 add 标量是同一序列的一部分,但在您的原始版本中,它们是父序列不同元素的第一个元素。

    第二个例子也出现同样的问题。

    【讨论】:

    • 嗯,我已经尝试按照您的建议添加错过的“-”。现在再次添加它 - 它可以工作 o_O。魔法。或者缓存。与 @service 的第二个示例相同 - 现在也工作了。
    • 最好让两个窗口对yaml-online-parser.appspot.com 保持打开状态,一个是原始的,一个是重写的(至少在您进行实验时)。如果对应的 JSON 存在差异(您应该很容易注意到),则您的输入 YAML 存在语义差异。
    猜你喜欢
    • 1970-01-01
    • 2019-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多