69

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;
    }

 }
4

1 回答 1

109

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

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

于 2012-04-23T18:13:16.717 回答