Symfony2 中 ObjectManager 和 EntityManager 的区别?

Posted

技术标签:

【中文标题】Symfony2 中 ObjectManager 和 EntityManager 的区别?【英文标题】:Difference between ObjectManager and EntityManager in Symfony2? 【发布时间】:2012-05-04 08:58:21 【问题描述】:

Doctrine\Common\Persistence\ObjectManagerDoctrine\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

如何通过 ZF2 FormElementManager 将 Doctrine ObjectManager 传递给表单

RESTKit 0.20 - 注销和清除授权标头

Symfony2禁用缓存?

Symfony2 在 Twig 中获取用户角色