2016-03-24 51 views
0

我試圖將錯誤記錄責任轉移到我的類/實體。 目前唯一一個獲得記錄器實例的乾淨方式是從我的控制器中獲取,然後將其傳遞給我的實體。在類或實體內部登錄

是否有一種乾淨的方式來獲取我的類或實體內的記錄器的實例?

同去的EntityManager的

編輯:setter注入:

  • test.php的

enter image description here

  • services.yml

    services: 
        my_test: 
         class: AppBundle\Entity\Test   
         arguments: ["@logger"] 
         calls: 
          - [setLogger, ["@logger"]] 
    
  • DefaultController.php

    $test = new Test(); 
    $test->doLog(); 
    

我得到的錯誤是:

Fatal error: Call to a member function error() on null

,因爲它沒叫的setter

+0

您不應使用記錄器,實體管理器或您實體內的任何其他服務。對於您的自定義服務類,您應該閱讀有關依賴注入的內容:http://symfony.com/doc/current/book/service_container.html –

+0

請參閱我的編輯 – SnelleJelle

+0

您是使用框架還是僅使用部分組件? –

回答

1

如果定義你的班級作爲服務你一定不能自己調用構造函數。服務容器將關心構建對象。

相反,你必須讓你的記錄是這樣的(假設你想要在控制器內得到它):

class MyController extends Controller { 

    public function someAction() { 
     // ... 
     $test = $this->get('my_test'); 
     $test->doLog(); 
     // ... 
    } 
} 

還爲您正確的服務的定義是:

services: 
    my_test: 
     class: AppBundle\Entity\Test   
     calls: 
      - [setLogger, ["@logger"]] 

arguments key用於將參數傳遞給類的構造函數。但是你正在使用setter注入,所以參數鍵在這裏是錯誤的。

+0

是的,謝謝! – SnelleJelle

相關問題