我最近将我的一个项目从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)
这样的事情时,会抛出错误。
我不知道那里发生了什么。
答案 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