2015-07-01 51 views
3

我searh和讀了很多相同的問題,但曾經我得到了同樣的錯誤:/進樣kernel.root_dir到實體構造函數中的Symfony2

我創建一個服務:

parameters: 
    tbackend.report.class: T\BackendBundle\Entity\Report 
services: 
    tbackend.entity.report: 
     class: %tbackend.report.class% 
     arguments: ["%kernel.root_dir%"] 

而且我有這個在T \ BackendBundle \ Entity \ Report中:

public function __construct($rootDir){ 
    $this->rootDir = $rootDir; 
} 

當我嘗試創建新的Report();我收到此消息:

警告:缺少參數1對於T \ BackendBundle \實體\報告:: __結構(),稱爲在/ var/WWW /測試/ t_study/src目錄/ T/BackendBundle /實體/ ReportRepository .PHP線62和定義

考慮:我知道services.yml叫,我在這個文件中,所有工作正常(Loginhandlers等),我只添加更多的多個服務(tbackend.entity .report)

這是什麼問題? :(我不知道是否需要更多的瞭解這個問題。我按照Symfony2的服務容器指南 http://symfony.com/doc/master/book/service_container.html

基本上,我儘量不使用DIR在實體移動文件

當泰

回答

3

當實例化一個類時,你使用普通的PHP。Symfony並不是一些魔法,它會掛鉤到PHP的實例化過程中,以便自動在構造函數中注入東西。

如果你想獲得服務,你必須注入SER在你需要它的類中有副作用,或者你擁有容器中的容器(例如,在控制器中)並從容器中檢索服務。

$report = $this->container->get('tbackend.entity.report'); 

或:(這是在所有情況下一個更好的做法,除了從控制器)

class WhereINeedTheReport 
{ 
    private $report; 

    public function __construct(Report $report) 
    { 
     $this->report = $report; 
    } 
} 
services: 
    # ... 
    where_i_need_the_report: 
     class: ... 
     arguments: ["@tbackend.entity.report"] 
+0

現在我只需要這一個自定義EntityRepository導出到用戶報告,TY! – Worvast

相關問題