2013-02-07 15 views
0

我最近升級從2.0.x版本的Symfony我的項目之一,2.1.x的調用未定義的方法原則包 DoctrineBundle 註冊表中:堅持()

一切工作正常,但是當我試圖堅持的在服務實體,PHP拋出一個錯誤:

Call to undefined method Doctrine\Bundle\DoctrineBundle\Registry::persist()

在控制器,一切工作正常。即使在服務中從數據庫獲取對象也能正常工作,但沒有撥打->persist($entity)

這是我的服務定義:

registration_form: 
    class: KnowHow\ERegistration\BackendBundle\Service\RegistrationFormService 
    arguments: [ @doctrine ] 

而我的等級:

class RegistrationFormService 
{ 
    /** @var $em \Doctrine\ORM\EntityManager */ 
    private $em; 

    /** 
     * Ctor. 
     * 
     * @param $doctrine 
     */ 
    public function __construct($doctrine) 
    { 
     $this->em = $doctrine; 
    } 
} 

這是正常的,但是當我嘗試做一些像THI $this->em->persist($entity)錯誤被拋出。

我不知道那裏發生了什麼。

回答

3

你必須注入@doctrine.orm.entity_manager你正在試圖做

registration_form: 
    class: KnowHow\ERegistration\BackendBundle\Service\RegistrationFormService 
    arguments: [ @doctrine ] 
       ----^ (isn't good) 

其修改爲

registration_form: 
    class: KnowHow\ERegistration\BackendBundle\Service\RegistrationFormService 
    arguments: [ @doctrine.orm.entity_manager ] 

或者什麼,你必須使用財產以後做這樣的(在你的構造函數)

public function __construct(Doctrine $doctrine) 
{ 
    $this->em = $doctrine->getEntityManager(); 
} 

正如Cyprian的建議,我將添加$doctrine的類型用於類型檢查的變量。不知道Doctrine是正確的類,但我想這是

我建議僅注入entity_manager如果你不需要整個doctrine供應商

+0

天哪......當然......謝謝很多! –

+0

@JohannesKlauß:不客氣 – DonCallisto

+2

我只是補充說,這也是好主意強類型參數注入(例如公共職能__construct(Doctrine \ ORM \ EntityManager $學說))。它真的可以幫助你在未來避免這種類型的錯誤。 – Cyprian

相關問題