Symfony config.yml - 如何按名称传递构造函数参数?

时间:2015-12-16 10:51:55

标签: php symfony monolog

我正在尝试使用自定义格式化程序在我的Symfony WebApp中使用Monlog创建的日志条目:

//config.yml
services:
    monolog.formatter.extended:
        class: Monolog\Formatter\LineFormatter
        arguments:
            format: "[%%datetime%%] %%channel%%.%%level_name%% ...\n\n"
            allowInlineLineBreaks: true
            ignoreEmptyContextAndExtra: true
        calls:
            - [includeStacktraces]

使用此格式化程序创建的所有日志条目均以[1]...开头,而不是插入正确的时间戳,如[2015-12-16 10:40:23]...

当我删除另外两个参数allowInlineLineBreaksignoreEmptyContextAndExtra时,系统不会显示此问题:

arguments:
    format: "[%%datetime%%] %%channel%%.%%level_name%% ...\n\n"

但是,当我没有按名称传递参数而只是作为完整列表时,一切正常。 LineFormatter构造函数如下所示:

public function __construct($format = null, $dateFormat = null, $allowInlineLineBreaks = false, $ignoreEmptyContextAndExtra = false) { ...}

因此,将参数添加为列表可以正常工作:

 arguments:
    - "[%%datetime%%] %%channel%%.%%level_name%% ...\n\n"
    - null
    - true
    - true

按名称传递参数有什么问题?我在几个例子中看到了这一点,但显然我使用它的方式有问题吗?

1 个答案:

答案 0 :(得分:2)

说实话,我从未见过使用密钥注入参数。 我知道你可以在处理参数时或使用setter注入时使用键,比如文档说: http://symfony.com/doc/current/book/service_container.html#optional-dependencies-setter-injection

如果你想使用setter注入,你可以这样做:

//config.yml
services:
    some.service.name:
        class: SomeClass
        calls:
            - [setFormat, "[%%datetime%%] %%channel%%.%%level_name%%"]

但Monolog LineFormatter并不支持。

最后我想你会选择常见的阵列模式。

我希望这会有所帮助,如果您有一些文档显示使用键的示例我希望看到它然后我们可以讨论它!