2012-04-23 8 views
51

Qual è la differenza tra Doctrine\Common\Persistence\ObjectManager e Doctrine\ORM\EntityManager quando lo si utilizza in un tipo di modulo personalizzato?Differenza tra ObjectManager e EntityManager in Symfony2?

Posso ottenere il contenitore utilizzando sia $this->em->getRepository() e $this->om->getRepository().

class MyFormType extends \Symfony\Component\Form\AbstractType 
{ 

    /** 
    * @var Doctrine\ORM\EntityManager 
    */ 
    protected $em; 

    public function __construct(Doctrine\ORM\EntityManager $em) 
    { 
     $this->em = $em; 
    } 

} 

Invece di:

class MyFormType extends \Symfony\Component\Form\AbstractType 
{ 

    /** 
    * @var Doctrine\Common\Persistence\ObjectManager 
    */ 
    protected $om; 

    public function __construct(Doctrine\Common\Persistence\ObjectManager $om) 
    { 
     $this->om = $om; 
    } 

} 

risposta

87

ObjectManager è un'interfaccia e EntityManager è la sua implementazione ORM. Non è l'unica implementazione; ad esempio, DocumentManager di MongoDB ODM implementa anche questo. ObjectManager fornisce solo il sottoinsieme comune di tutte le sue implementazioni.

Se si desidera che il tipo di modulo funzioni con qualsiasi implementazione ObjectManager, quindi utilizzarlo. In questo modo è possibile passare da ORM a ODM e il tuo tipo continuerà a funzionare allo stesso modo. Ma se hai bisogno di qualcosa di specifico che solo EntityManager fornisce e non hai intenzione di passare a ODM, usalo al suo posto.

+0

Wow, grazie! Vado per ObjectManager. – gremo

+0

Penso che l'uso di EntityManager sia ora deprecato, o almeno il suo uso in un'iniezione di dipendenze. Ma c'è ancora EntityManagerInterface se sono corretto, e non conosco la differenza tra Objectmanager e EntityManagerInterface. –