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