Почему Drupal Entity Events не запускаются? - PullRequest
0 голосов
/ 24 апреля 2020
namespace Drupal\ta3mal_utilities\EventSubscriber;

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

class EntityEvents implements EventSubscriberInterface {


    public function onCreate(EntityTypeEvent $event) {
        //Do things on creation
    }

    public function onUpdate(EntityTypeEvent $event) {
        dd('on update now');
    }

    public function onDelete(EntityTypeEvent $event) {
        //Do things on delete
    }

    /**
     * {@inheritdoc}
     */
    public static function getSubscribedEvents() {
        $events = [];

        $events[EntityTypeEvents::CREATE][] = ['onCreate', 1];
        $events[EntityTypeEvents::UPDATE][] = ['onUpdate', 1];
        $events[EntityTypeEvents::DELETE][] = ['onDelete', 1];
        return $events;
    }

}

Я также включил это в файл служб, вызывается getSubscribeedEvents , но он не доходит до обновленного, любая помощь? Спасибо.

1 Ответ

0 голосов
/ 29 апреля 2020

EntityTypeEvents::XXX срабатывает при создании / обновлении / удалении entity types. Глядя на ваше имя класса, я предполагаю, что вы хотите entity события. В настоящее время это невозможно сделать с помощью Drupal Core и комбо событий, которые вы пытаетесь реализовать. Обращаясь к этой проблеме: https://www.drupal.org/project/drupal/issues/2551893 вы также можете попробовать модуль, указанный в билете, но у меня нет опыта работы с этим модулем, поэтому пробег может отличаться.

Если вам нужны события сущностей, которые вам нужно придерживаться старой системы стилей хуков.

Крюки, которые вы ищете:

  • hook_entity_update
  • hook_entity_delete
  • hook_entity_create / hook_entity_insert (в зависимости от того, что вы хотите сделать)

Полная ссылка здесь, в документации по Drupal: https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Entity%21entity.api.php/8.8.x

Еще одна вещь, которую я заметил, может помочь вам в будущем при реализации слушателей событий, это то, что Вы объявили все свои события подписки с приоритетом 1. Возможно, вы устанавливаете слишком высокий приоритет в иерархии. Если вам не нужно явно выполнять ваш код перед любыми другими модулями Drupal или основными функциями, я бы опустил приоритет и просто оставил его пустым, чтобы использовалось значение по умолчанию (0), это обеспечит добавление вашего события в конец списка. Порядок выполнения может означать, что вы нарушаете функциональность других модулей / ядра, поэтому всегда будьте осторожны с этим.

/**
 * {@inheritdoc}
 */
public static function getSubscribedEvents() {
    $events[EntityTypeEvents::CREATE][] = ['onCreate'];
    $events[EntityTypeEvents::UPDATE][] = ['onUpdate'];
    $events[EntityTypeEvents::DELETE][] = ['onDelete'];
    return $events;
}

Меньший код не доступен, вы также можете опустить $events = [];, так как не нужно объявлять пустой массив.

...