web-dev-qa-db-ja.com

Symfony2のObjectManagerとEntityManagerの違いは?

カスタムフォームタイプで使用する場合の_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;
    }

 }
_
63
gremo

ObjectManagerはインターフェースであり、EntityManagerはそのORM実装です。唯一の実装ではありません。たとえば、MongoDB ODMのDocumentManagerも同様に実装します。 ObjectManagerは、そのすべての実装の共通サブセットのみを提供します。

フォームタイプをObjectManager実装で動作させる場合は、それを使用します。この方法で、ORMからODMに切り替えても、タイプは同じように機能します。ただし、EntityManagerのみが提供する特定の何かが必要で、ODMに切り替える予定がない場合は、代わりにそれを使用してください。

101