Symfony2中ObjectManager和EntityManager的区别是什么?

72

在自定义表单类型中,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个回答

111

ObjectManager是一个接口,而EntityManager则是它的ORM实现。它并不是唯一的实现方式;例如,MongoDB ODM的DocumentManager同样也实现了这个接口。ObjectManager只提供所有实现中公共的子集。

如果你希望你的表单类型能够与任何ObjectManager实现一起使用,那么请使用它。这样,你就可以从ORM切换到ODM,但是你的类型仍将正常工作。但是,如果你需要一些只有EntityManager提供的特定功能,并且不打算切换到ODM,则应该使用它。


3
我认为EntityManager的使用现在已经过时了,或者至少在依赖注入中是这样。但如果我没记错的话,还有一个称作EntityManagerInterface的接口可供使用,而我不太清楚ObjectManager和EntityManagerInterface之间的区别。 - Mat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接