调用未定义的方法Doctrine \ Bundle \ DoctrineBundle \ Registry :: persist()

时间:2013-02-07 13:47:59

标签: symfony doctrine-orm symfony-2.1

我最近将我的一个项目从Symfony 2.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)这样的事情时,会抛出错误。

我不知道那里发生了什么。

1 个答案:

答案 0 :(得分: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 ]

或者,你必须使用像这样的东西(在你的构造函数中)

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

正如Cyprian建议的那样,我将为类型检查添加$doctrine变量的类型。不知道Doctrine是否是正确的类,但我认为它是

如果您不需要整个entity_manager供应商,我建议只注入doctrine