2015-12-16 119 views
2

我想用在我的Symfony的Web应用程序与Monlog创建日志条目自定义格式:使用此格式开始创建了[1]...而不是插入正确的时间戳一样[2015-12-16 10:40:23]...Symfony config.yml - 如何通过名称传递构造函数参数?

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

的所有日志条目此问题不显示当我删除了两个额外的paramters allowInlineLineBreaksignoreEmptyContextAndExtra

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

但是,当我不通过名称传递参数,而是简单地将其作为完整列表传递时,一切正常。该LineFormatter构造是这样的:

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

所以添加的参数为列表workes罚款:

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

什么是错的名字传递的参数?我已经在几个例子中看到了这一点,但是明显的是我使用这个方法有什么问题?

回答

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%%"] 

但独白LineFormatter不支持。

最后,我认为你会去通用数组模式。

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

+0

谢谢你的回答!我在不同的例子中看到了这个名称风格(例如http://www.petethompson.net/blog/symfony/2015/03/15/symfony-logging-client-ip/和http://stackoverflow.com/a/11654384/777861),并认为它将有效的语法。但是你是对的,我找不到任何使用这种风格的文档。奇怪。 –

+1

似乎依赖关系注入器只考虑值,所以如果您使用该名称并保持顺序确定,但如果尝试更改顺序,它也将以错误的顺序注入。我也在研究一些内部的东西,看起来好像关键只是用来取代你需要的参数。 –

+0

感谢您的提示,这是完全有道理的。由于dateFormat是第二个参数,很明显,当“true”(或其他不是有效的)作为第二个参数传递时,这是无法解决的,不会使用任何名称。 –

相关问题