Symfony2 中 ObjectManager 和 EntityManager 的区别?
Posted
技术标签:
【中文标题】Symfony2 中 ObjectManager 和 EntityManager 的区别?【英文标题】:Difference between ObjectManager and EntityManager in Symfony2? 【发布时间】:2012-05-04 08:58:21 【问题描述】: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;
【问题讨论】:
【参考方案1】:ObjectManager
是一个接口,EntityManager
是它的 ORM 实现。这不是唯一的实现。例如,来自 MongoDB ODM 的 DocumentManager
也实现了它。 ObjectManager
仅提供其所有实现的公共子集。
如果您希望您的表单类型与任何ObjectManager
实现一起使用,请使用它。这样,您可以从 ORM 切换到 ODM,并且您的类型仍然可以正常工作。但是,如果您需要只有 EntityManager
提供的特定内容并且不打算切换到 ODM,请改用它。
【讨论】:
我认为现在不推荐使用 EntityManager,或者至少在依赖注入中使用它。但是如果我没记错的话还是有EntityManagerInterface的,我不知道Objectmanager和EntityManagerInterface的区别。以上是关于Symfony2 中 ObjectManager 和 EntityManager 的区别?的主要内容,如果未能解决你的问题,请参考以下文章
FOSUserBundle 上的错误,传递的参数必须是 ObjectManager 的实例
RESTKit:重用 objectManager 来制作后续的 POST