2015-12-16 39 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」(或其他不是有效的)作爲第二個參數傳遞時,這是無法解決的,不會使用任何名稱。 –

相關問題