2014-02-14 1 views
1

Я использую Oneup \ AclBundle, и после последнего обновления я больше не могу сохранить никакой объект.Ошибка, вызванная изменениями зависимости Doctrine в DoctrineSubscriber для Oneup/AclBundle

Когда я пытаюсь сохранить объект в базу данных:

$em = $this->getDoctrine()->getManager(); 
$em->persist($entity); 
$em->flush(); 

... Я получаю эту ошибку:

ContextErrorException: Catchable Fatal Error: Argument 1 passed to Oneup\AclBundle\EventListener\DoctrineSubscriber::postPersist() must be an instance of Doctrine\Common\Persistence\Event\LifecycleEventArgs, instance of Doctrine\ORM\Event\LifecycleEventArgs given, called in vendor/symfony/symfony/src/Symfony/Bridge/Doctrine/ContainerAwareEventManager.php on line 61 and defined in vendor/oneup/acl-bundle/Oneup/AclBundle/EventListener/DoctrineSubscriber.php line 18

Я нашел это изменение Oneup/AclBundle: https://github.com/danez/OneupAclBundle/commit/f3eacf040677019caad73d221a610c73cbd7dd25

Исходя из этого, я попытался изменить поставщика файлов/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.

После обновления журнала для этого расслоения был:

  • Updating oneup/acl-bundle dev-master (b3c6ddb => fc3fdbc) Checking out fc3fdbcf3547f0e0520ebb7f7f7e86e3a05779d4
+0

Bundle dev here. Какую версию учения/общей вы используете? Похоже, я ошибался. Согласно [source] (https://github.com/doctrine/doctrine2/blob/2.4/lib/Doctrine/ORM/Event/LifecycleEventArgs.php) объект события наследует от 'LifecycleEventArgs' до версии 2.4, что не оптимально, мягко говоря. – devsheeep

+0

Я использую версию v2.4.1 – dxvargas

+0

Привет @devsheeep, вам нужна дополнительная информация? Я все еще придерживаюсь этого ... хотя я временно меняю файл, как я сказал, чтобы продолжить. Может быть, я просто вернусь к предыдущей версии ... – dxvargas

ответ

1

Указанная ошибка была брошена из-за сочетания слишком узкой наследования и слишком широко определенной зависимости композитора.

Для справки: ошибка была указана в oneup/acl-bundle#7 и зафиксирована фиксацией d07385b. Если вы столкнулись с этой ошибкой, обновите комплект до новой версии v0.9.1 и doctrine/orm до 2.4.2, как указано в the bug report.

Смежные вопросы