2016-03-22 12 views
0

これはDrupal 8への私の最初の進出であり、私は困惑しています。Drupalでhook_entity_updateから予測できない結果8

ノードが更新された後、ファイルフィールド(および可能であればディスク上のファイルの場所)にファイルのファイル名を取得しようとしています。今、私はhook_entity_updateを実装していますし、時には次のコードで予想外のエンティティIDを取得しています:

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

を私はノードを更新し、ファイルのフィールド以外の他のフィールドを変更する場合は、ノードのエンティティIDを出力します。

ノードを更新し、ファイルフィールドのファイルを削除/置換すると、ファイルのエンティティIDが出力されます。

私はいつもノードのエンティティIDを出力すると予想しているので、ここで何かを理解していないことは明らかです。

最後のゲームは、ノードが更新された後にファイルフィールドのファイルを特定の場所にコピーすることですが、期待した値を確実に得ることができません。誰かが何が起こっているのか理解できるように助けることができれば、私はそれを感謝するだろう。

答えて

1

私の問題を解明しました。

イメージフィールドを更新すると、まずファイルエンティティが更新され、次にノードエンティティが更新されます。したがって、フック実装の最初の実行はFileエンティティでした。

ノードエンティティのみで動作するように、まずノードエンティティであるかどうかを確認します。私は何をする必要があるかについては

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

それが更新されたファイルの実体だ場合、私がチェックするために、今、私は何が起こっているの知っている、それはより便利です。

関連する問題