Drupal 8 中 hook_entity_update 的不可预测结果

Unpredictable results from hook_entity_update in Drupal 8

这是我第一次接触 Drupal 8,我被难住了。

我正在尝试在节点更新后获取文件字段中文件的文件名(如果可能,还有它在磁盘上的位置)。现在我正在实施 hook_entity_update 并且有时会使用以下代码获得意外的实体 ID:

function mymodule_entity_update(Drupal\Core\Entity\EntityInterface $entity)
{
    die($entity->id());
}

如果我更新节点并更改文件字段以外的其他字段,它会打印节点的实体 ID。

如果我更新节点和 delete/replace 文件字段中的文件,它会打印文件的实体 ID。

我希望它总是打印节点的实体 ID,所以我显然不理解这里的内容。

最终结果是在节点更新后将文件字段中的文件复制到特定位置,但我无法可靠地获得我期望的值。如果有人可以帮助我了解正在发生的事情,我将不胜感激。

解决了我的问题。

当我更新图像字段时,它首先更新文件实体,然后是节点实体。因此第一个 运行 通过挂钩实现的是文件实体。

为了只作用于一个节点实体,我先检查它是否是一个节点实体。

function mymodule_entity_update(Drupal\Core\Entity\EntityInterface $entity)
{
    if($entity->getEntityTypeId() == 'node'){
        die($entity->id()); // prints node id only
    }
}

对于我需要做的事情,既然我知道发生了什么,检查它是否是正在更新的文件实体对我来说更有用。