首页 文章

由Oneup / AclBundle的DoctrineSubscriber中的Doctrine依赖项更改引起的错误

提问于
浏览
1

我正在使用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 回答

  • 1

    由于过于狭窄的继承和过于宽泛的定义的编写器依赖性,所引发的错误被抛出 .

    记录:该错误在oneup/acl-bundle#7中报告并通过提交d07385b修复 . 如果遇到此错误,请将包更新到新版本v0.9.1doctrine/orm2.4.2 ,如the bug report中所述 .

相关问题