Какая разница между Doctrine\Common\Persistence\ObjectManager
и Doctrine\ORM\EntityManager
при использовании в пользовательском типе формы?
Я могу получить репозиторий, используя как $this->em->getRepository()
, так и $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;
}
}
Вместо:
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
- это интерфейс, а EntityManager
- его реализация ORM. Это не единственная реализация; например, DocumentManager
от MongoDB ODM реализует его. ObjectManager
предоставляет только общее подмножество всех его реализаций.
Если вы хотите, чтобы ваш тип формы работал с любой реализацией ObjectManager
, используйте его. Таким образом, вы можете переключиться с ORM на ODM, и ваш тип будет работать одинаково. Но если вам нужно что-то конкретное, которое только EntityManager
предоставляет и не планирует переключиться на ODM, используйте его вместо этого.