Symfony2中ObjectManager和EntityManager之间的区别?

时间:2012-04-23 18:01:53

标签: symfony doctrine doctrine-orm symfony-forms

在自定义表单类型中使用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 个答案:

答案 0 :(得分:99)

ObjectManager是一个接口,EntityManager是其ORM实现。这不是唯一的实施;例如,MongoDB ODM的DocumentManager也实现了它。 ObjectManager仅提供其所有实现的公共子集。

如果您希望表单类型与任何ObjectManager实现一起使用,请使用它。这样您就可以从ORM切换到ODM,您的类型仍然可以正常工作。但是,如果您需要仅EntityManager提供并且不打算切换到ODM的特定内容,请使用它。