web-dev-qa-db-ja.com

EntityTypeEventsのイベントサブスクリプション

したがって、EntityTypeEventsのイベントサブスクライバーを動作させようとしているのですが、なぜイベントが発生しないのかわかりません。

これはコードの一般的な概要です:

namespace Drupal\subscriber_class_module;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Drupal\Core\Entity\EntityTypeEvents;
use Drupal\Core\Entity\EntityTypeEvent;

class SubscriberClassModuleSubscribesToEntityTypeEvents implements EventSubscriberInterface {

    public function onCreate(EntityTypeEvent $event)  {
          //Do things on creation
    }
    public function onUpdate(EntityTypeEvent $event)  {
          //Do things on update
    }
    public function onDelete(EntityTypeEvent $event)  {
          //Do things on delete
    }
    static function getSubscribedEvents() {
         $events = [];

         $events[EntityTypeEvents::CREATE][] = array('onCreate', 100);
         $events[EntityTypeEvents::UPDATE][] = array('onUpdate', 100);
         $events[EntityTypeEvents::DELETE][] = array('onDelete', 100);
         return $events;
    }
}

クラス宣言と名前空間を追加しました。私が使用しているのと同じクラスがカーネルイベントで発生する可能性がないことに注意する必要があります。エンティティイベントに何か特別なものがあるかどうか疑問に思っています。

2
mcoatney

私はすでに同じ問題を抱えています。このクラスをEntityTypeListenerInterfaceに実装し、EntityTypeEventSubscriberTraitトレイトを使用する必要があります

class SubscriberClassModuleSubscribesToEntityTypeEvents implements EntityTypeListenerInterface, EventSubscriberInterface{

use EntityTypeEventSubscriberTrait;

public function __construct(EntityManagerInterface $entity_manager) {
    $this->entityManager = $entity_manager;
}

public function onCreate(EntityTypeEvent $event)  {
      //Do things on creation
}
public function onUpdate(EntityTypeEvent $event)  {
      //Do things on update
}
public function onDelete(EntityTypeEvent $event)  {
      //Do things on delete
}

/**
 * {@inheritdoc}
 */
public static function getSubscribedEvents() {
    return static::getEntityTypeEvents();
}

}

そして、あなたはあなたのmodule.service.yml宣言引数でエンティティマネージャをロードするようになります:['@ entity.manager']

2
Rachid Touhami