web-dev-qa-db-fra.com

Différence entre ObjectManager et EntityManager dans Symfony2?

Quelle est la différence entre Doctrine\Common\Persistence\ObjectManager Et Doctrine\ORM\EntityManager Lorsque vous l'utilisez dans un type de formulaire personnalisé?

Je peux obtenir le référentiel en utilisant à la fois $this->em->getRepository() et $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;
    }

 }

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

 }
63
gremo

ObjectManager est une interface et EntityManager est son implémentation ORM. Ce n'est pas la seule implémentation; par exemple, DocumentManager de MongoDB ODM l'implémente également. ObjectManager ne fournit que le sous-ensemble commun de toutes ses implémentations.

Si vous souhaitez que votre type de formulaire fonctionne avec n'importe quelle implémentation ObjectManager, utilisez-la. De cette façon, vous pouvez passer d'ORM à ODM et votre type fonctionnera toujours de la même manière. Mais si vous avez besoin de quelque chose de spécifique que seul EntityManager fournit et que vous ne prévoyez pas de passer à ODM, utilisez-le à la place.

101