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)的事情时,会抛出错误。

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

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 ]

或者,你必须使用这样的事情(在你的构造函数中)

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

正如 Cyprian 所建议的,我将添加$doctrine变量类型以进行类型检查。不知道是否Doctrine是正确的课程,但我想是的

我建议仅entity_manager在您不需要整个doctrine供应商时才注入

于 2013-02-07T13:55:13.837 回答