2011-11-05 15 views
5

Symfony2'de, Doctrine'nin varlık yöneticisini özel bir sınıfa veya hizmete ekleme hakkında nasıl gidebilirim? BenEntity Manager'ı özel bir sınıfa veya hizmete nasıl ekleyebilirim?

Hem $em = $this->get("doctrine.orm.entity_manager"); ve $em = $this->getDoctrine()->getEntityManager(); çalıştılar

denemek ve benim özel sınıf/hizmet ile Kontrolör sınıfını genişletmek götürdü hangi başarısız oldu ve bu ateşin dev top öldü.

cevap

7

Durum yöneticisi hizmetini özel hizmetinize enjekte etmeniz gerekir. Servis tanımı aşağıdaki gibi görünmelidir:

my.service.name: 
    class:  my\class 
    arguments: [ @doctrine.orm.default_entity_manager ] 

senin hizmetin __construct yöntemi bir argüman olarak varlık yöneticisi alır emin olun.

Daha fazla bilgi için Service Container chapter'a bakın.

BTW, $this->getDoctrine() Sen değil EntityManager erişmek için bir hizmet olarak Denetleyicinizi tanımlamak gerekiyor sadece Symfony\Bundle\FrameworkBundle\Controller\Controller

+0

Symfony 2.3'de "@ doctrine.orm.entity_manager" kullanıyorum. "@ Doctrine.orm.entity_manager" ve "@ doctrine.orm.default_entity_manager" arasında bir fark var mı? –

8

uzanan bir sınıfta çalışacak bir kısayol yöntemidir. Yukarıda bahsedilen Controller::getDoctrine() yöntemi, doktrin hizmetinin gerçekten mevcut olup olmadığını kontrol ettikten sonra $this->container->get('doctrine')'u arayarak Doktrin Kayıt Defterini döndürür. Bir sınıfta $this->container->get(..) değil $this->get(..)ContainerAware uygulayan/uzanan olduğunu

public function getEntityManager() { 
    return $this->container->get('doctrine')->getEntityManager(); 
} 

Not:

Basitçe özel sınıf/kontrolör ContainerAware uzatmak ve benzeri bir kısayol yöntemi tanımlamak olun.

+0

'ContainerAware' genişletme konusunda harika bir nokta, teşekkürler! – Nick

+0

Bir çekicilik gibi çalışmak! Teşekkür ederim dostum :) – Marc

+0

"Yukarıdaki yöntem kullanılırken" ... "nesnesindeki nesne olmayan bir üye işlev çağrısı" alıyorum. – someuser

İlgili konular