1

最近、プロジェクトの1つをSymfony2.0.xから2.1.xにアップグレードしました

すべて正常に動作しますが、エンティティをサービスに永続化しようとすると、PHPはエラーをスローします。

Call to undefined method Doctrine\Bundle\DoctrineBundle\Registry::persist()

コントローラでは、すべてが正常に機能します。サービス内のdbからオブジェクトをフェッチすることもできますが、への呼び出しはありません->persist($entity)

これは私のサービス定義です:

registration_form:
    class: KnowHow\ERegistration\BackendBundle\Service\RegistrationFormService
    arguments: [ @doctrine ]

そして私のクラス:

 class RegistrationFormService
 {
     /** @var $em \Doctrine\ORM\EntityManager */
     private $em;

     /**
      * Ctor.
      *
      * @param $doctrine
      */
     public function __construct($doctrine)
     {
        $this->em = $doctrine;
     }
}

これは問題ありませんが、このようなことをしようとすると$this->em->persist($entity)、エラーがスローされます。

私はそこで何が起こっているのか分かりません。

4

1 に答える 1

4

@doctrine.orm.entity_managerあなたはあなたがしようとしていることのために注入する必要があります

registration_form:
    class: KnowHow\ERegistration\BackendBundle\Service\RegistrationFormService
    arguments: [ @doctrine ]
               ----^ (isn't good)

に変更します

registration_form:
    class: KnowHow\ERegistration\BackendBundle\Service\RegistrationFormService
    arguments: [ @doctrine.orm.entity_manager ]

または、このようなdoを使用する必要があります(コンストラクターで)

public function __construct(Doctrine $doctrine)
{
    $this->em = $doctrine->getEntityManager();
}

Cyprianが提案するように、$doctrine型チェック用に変数の型を追加します。正しいクラスかどうかはわかりませんDoctrineが、正しいクラスだと思います

ベンダーentity_manager全体が必要ない場合にのみ注入することをお勧めしますdoctrine

于 2013-02-07T13:55:13.837 に答える