在自定义表单类型中使用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;
}
}
答案 0 :(得分:99)
ObjectManager
是一个接口,EntityManager
是其ORM实现。这不是唯一的实施;例如,MongoDB ODM的DocumentManager
也实现了它。 ObjectManager
仅提供其所有实现的公共子集。
如果您希望表单类型与任何ObjectManager
实现一起使用,请使用它。这样您就可以从ORM切换到ODM,您的类型仍然可以正常工作。但是,如果您需要仅EntityManager
提供并且不打算切换到ODM的特定内容,请使用它。