这是我第一次涉足Drupal 8而且我很难过。
我试图在更新节点后获取文件字段中的文件名(如果可能,在磁盘上的位置)。现在我正在实现hook_entity_update,有时会使用以下代码获得意外的实体ID:
function mymodule_entity_update(Drupal\Core\Entity\EntityInterface $entity)
{
die($entity->id());
}
如果我更新节点并更改文件字段之外的其他字段,则会打印节点的实体ID。
如果我更新节点并删除/替换文件字段中的文件,它将打印文件的实体ID。
我希望它始终打印节点的实体ID,所以我显然不会在这里理解。
最终游戏是在节点更新后将文件字段中的文件复制到特定位置,但我无法可靠地获取我期望的值。如果有人能帮我理解发生了什么,我会很感激。
答案 0 :(得分:2)
弄清楚我的问题。
当我更新图像字段时,它首先更新文件实体,然后更新节点实体。所以第一次通过钩子实现是文件实体。
要仅对节点实体进行操作,我首先检查它是否是节点实体。
function mymodule_entity_update(Drupal\Core\Entity\EntityInterface $entity)
{
if($entity->getEntityTypeId() == 'node'){
die($entity->id()); // prints node id only
}
}
对于我需要做的事情,既然我知道发生了什么,那么检查它是否是一个正在更新的文件实体对我来说更有用。