我正在使用Oneup \ AclBundle,在上次更新后,我无法再保存任何实体 .
当我尝试将我的实体保存到数据库时:
$em = $this->getDoctrine()->getManager();
$em->persist($entity);
$em->flush();
...我收到此错误:
ContextErrorException:Catchable Fatal Error:传递给Oneup的参数1 \ AclBundle \ EventListener \ DoctrineSubscriber :: postPersist()必须是Doctrine \ Common \ Persistence \ Event \ LifecycleEventArgs的一个实例,Doctrine \ ORM \ Event \ LifecycleEventArgs的实例给出,调用在第61行的vendor / symfony / symfony / src / Symfony / Bridge / Doctrine / ContainerAwareEventManager.php中,在vendor / oneup / acl-bundle / Oneup / AclBundle / EventListener / DoctrineSubscriber.php第18行中定义
我发现Oneup / AclBundle的这个变化:https://github.com/danez/OneupAclBundle/commit/f3eacf040677019caad73d221a610c73cbd7dd25
基于此,我尝试更改文件vendor / oneup / acl-bundle / Oneup / AclBundle / EventListener / DoctrineSubscriber.php:
use Doctrine\Common\Persistence\Event\LifecycleEventArgs;
...
class DoctrineSubscriber implements EventSubscriber
{
...
public function postPersist(LifecycleEventArgs $args)
{
...
$entity = $args->getObject();
$object = new \ReflectionClass($entity);
...
}
}
... 至:
use Doctrine\ORM\Event\LifecycleEventArgs;
...
class DoctrineSubscriber implements EventSubscriber
{
...
public function postPersist(LifecycleEventArgs $args)
{
...
$entity = method_exists($args, 'getObject')? $args->getObject(): $args->getEntity(); // the called method sometimes changes
$object = new \ReflectionClass($entity);
...
}
}
......并且像这样有效 .
如何通过此更新重新启动工作?我想我必须以某种方式使一个共同的学说EventClass被解雇,而不是一个ORM学说EventClass .
更新后,此捆绑包的日志为:
更新oneup / acl-bundle dev-master(b3c6ddb => fc3fdbc)检出fc3fdbcf3547f0e0520ebb7f7f7e86e3a05779d4
1 回答
由于过于狭窄的继承和过于宽泛的定义的编写器依赖性,所引发的错误被抛出 .
记录:该错误在oneup/acl-bundle#7中报告并通过提交d07385b修复 . 如果遇到此错误,请将包更新到新版本v0.9.1和
doctrine/orm
到2.4.2
,如the bug report中所述 .