Drupal 8中的hook_entity_update导致不可预知的结果

时间:2016-03-22 16:28:32

标签: drupal drupal-8

这是我第一次涉足Drupal 8而且我很难过。

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

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

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

如果我更新节点并删除/替换文件字段中的文件,它将打印文件的实体ID。

我希望它始终打印节点的实体ID,所以我显然不会在这里理解。

最终游戏是在节点更新后将文件字段中的文件复制到特定位置,但我无法可靠地获取我期望的值。如果有人能帮我理解发生了什么,我会很感激。

1 个答案:

答案 0 :(得分:2)

弄清楚我的问题。

当我更新图像字段时,它首先更新文件实体,然后更新节点实体。所以第一次通过钩子实现是文件实体。

要仅对节点实体进行操作,我首先检查它是否是节点实体。

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

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