Différence entre ObjectManager et EntityManager dans Symfony2?

Quelle est la différence entre Docsortingne\Common\Persistence\ObjectManager et Docsortingne\ORM\EntityManager lorsque vous l’utilisez dans un type de formulaire personnalisé?

Je peux obtenir le référentiel en utilisant $this->em->getRepository() et $this->om->getRepository() .

 class MyFormType extends \Symfony\Component\Form\AbstractType { /** * @var Docsortingne\ORM\EntityManager */ protected $em; public function __construct(Docsortingne\ORM\EntityManager $em) { $this->em = $em; } } 

Au lieu de:

 class MyFormType extends \Symfony\Component\Form\AbstractType { /** * @var Docsortingne\Common\Persistence\ObjectManager */ protected $om; public function __construct(Docsortingne\Common\Persistence\ObjectManager $om) { $this->om = $om; } } 

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 fournit uniquement le sous-ensemble commun de toutes ses implémentations.

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