symfony - 为什么 Drupal 实体事件没有触发?

标签 symfony drupal entity

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;
    }

}

我也将其包含在服务文件中,调用了 getSubscribedEvents 但它没有到达更新的事件,有什么帮助吗? 谢谢。

最佳答案

创建/更新/删除实体类型时会触发

EntityTypeEvents::XXX。看看你的类名,我假设你想要 entity 事件。目前,使用 Drupal Core 和您尝试实现的事件组合无法做到这一点。引用此问题:https://www.drupal.org/project/drupal/issues/2551893您也可以尝试票证中提到的贡献模块,但我对该模块没有任何经验,因此里程可能会有所不同。

如果您想要实体事件,您将需要坚持使用旧的钩子(Hook)样式系统。

您正在寻找的 Hook 是:

  • 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 = [];,因为不需要声明空数组。

关于symfony - 为什么 Drupal 实体事件没有触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61405528/

相关文章:

sql-server - Symfony2 + Doctrine2 + SQL Server - 事务支持

php - 多部分请求时 Fosrestbundle 主体为空

drupal - 是否有 drupal 6 hook 来处理登录身份验证而不从登录表单发布?

php - fatal error : Call to undefined function media_include_browser_js()

java - Hibernate @Where 不在@MappedSuperClass 实体上执行

php - Symfony2 异常捕捉困惑

drupal - Drupal 在哪里存储 NODE 数据?

hibernate - 如何在 JPA 实体中定义非聚集索引 include 子句

php - CakePHP 3.0 - 在实体中使用 MySQL 函数

symfony - 如何使用 Symfony2 访问 Controller 外部的服务?