如何覆盖yaml中父服务的第一个参数?

时间:2014-01-15 15:37:25

标签: symfony dependency-injection

来自monolog.xml:

    <service id="monolog.logger" parent="monolog.logger_prototype" public="false">
        <argument index="0">app</argument>
    </service>

    <service id="logger" alias="monolog.logger" />

    <service id="monolog.logger_prototype" class="%monolog.logger.class%" abstract="true">
        <argument /><!-- Channel -->
    </service>

如何在Yaml中完成相同的第0个参数覆盖?

2 个答案:

答案 0 :(得分:3)

我的同事创建了a bundle that allows you to easily convert from XML to YML,它提出了:

services:
    monolog.logger:
        public: false
        arguments: { index_0: app }

    monolog.logger_prototype:
        class: %monolog.logger.class%
        arguments: ['']

    logger: @monolog.logger

永远不会猜到这一点。

答案 1 :(得分:0)

使用自定义渠道定义记录器作为服务方式之一:

# app/config/config.yml
monolog:
    channels: [custom_channel]

在控制器中时: $logger = $this->get('monolog.logger.custom_channel');

或定义服务时:

services:
    app.logger.custom_channel:
        parent: monolog.logger.custom_channel