Событие Doctrine-PHPCR-ODM не запускается

У меня есть документ doctrine-phpcr-odm с именем article, и я хочу прорезать поле перед обновлением каждой статьи.
Событие запускается для объектов doctrine-orm, но не для документов doctrine-phpcr-odm!

class ArticlePreUpdateListener
{
    public function preUpdate(LifecycleEventArgs $args)
    {
        var_dump($args);
    }
}

article.pre_update.listener:
    class: AppBundle\EventListener\ArticlePreUpdateListener
    tags:
        - { name: doctrine.event_listener, event: preUpdate}

2 ответа

Решение

Согласно Docs, события Doctrine-PHPCR-ODM работают так же, как и события Doctrine ORM. Единственные различия:

  • используйте имя тега doctrine_phpcr.event_listener соотв.doctrine_phpcr.event_subscriber вместо doctrine.event_listener;
  • ожидать, что аргумент будет иметь классDoctrine\Common\Persistence\Event\LifecycleEventArgs,
`/** 
  * @Document 
  */
class Article
{
    [...]

    /**
     * @PreUpdate
     * @PrePersist
     */
    public function slugifiyField()
    {
       $this->yourField = yourSlugifyFunction($this->yourField);
    }
}

Затем добавьте функцию с preUpdate аннотация (я добавил PrePersist слизняк при создании статьи тоже)

Изменить: Согласно вашему комментарию, я удалил HasLifeCycleCallback аннотации, но, похоже, вы можете использовать Pre/PostUpdate аннотации непосредственно внутри объекта документа.

Другие вопросы по тегам