2012-04-23 36 views
51

¿Cuál es la diferencia entre Doctrine\Common\Persistence\ObjectManager y Doctrine\ORM\EntityManager al usarlo en un tipo de formulario personalizado?Diferencia entre ObjectManager y EntityManager en Symfony2?

Puedo obtener el repositorio usando $this->em->getRepository() y $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; 
    } 

} 

En lugar de:

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; 
    } 

} 

Respuesta

87

ObjectManager es una interfaz y EntityManager es su aplicación ORM. No es la única implementación; por ejemplo, DocumentManager de MongoDB ODM también lo implementa. ObjectManager proporciona solo el subconjunto común de todas sus implementaciones.

Si desea que su tipo de formulario funcione con cualquier implementación ObjectManager, úselo. De esta forma, podría cambiar de ORM a ODM y su tipo seguiría funcionando igual. Pero si necesita algo específico que solo EntityManager proporciona y no planea cambiar a ODM, utilícelo en su lugar.

+0

¡Guau, gracias! Iré por ObjectManager. – gremo

+0

Creo que el uso de EntityManager ahora está en desuso, o al menos su uso en una inyección de dependencia. Pero todavía hay EntityManagerInterface si estoy en lo cierto, y no conozco la diferencia entre Objectmanager y EntityManagerInterface. –