Open9
【Drupal】Entityのhookについて
ピン留めされたアイテム
参考にしたサイト
Entity操作
- エンティティの作成・読み取り・更新・削除(CRUD)操作は、エンティティストレージクラスによって実行される。
- コンテンツエンティティの場合、表示とレンダリングはビュービルダークラスによって処理される。
- エンティティの編集(新規追加を含む)は、エンティティフォームクラスによって処理される。
ここでは、すべてのエンティティCRUDとビューの操作、および各操作に対して(順番に)呼び出されるフックとその他の操作を一覧表示する。
メモ
- エンティティフックが呼び出されるたびに、タイプ固有のエンティティフックと汎用エンティティフックの両方が呼び出される。
- エンティティタイプ固有のフックは、
hook_ENTITY_TYPE _...()
で表す。 - 特定のタイプのフックに渡されるエンティティまたはエンティティの配列は、一般的なEntityクラスではなく特定のエンティティクラスであるため、引数
$entity
を$node
のようにして与えることができる。 - 多くの操作中に、静的メソッドがエンティティクラスで呼び出される。
改訂可能なエンティティ
- 改訂可能なエンティティは、そのデータに影響を与える変更を追跡できる。
- エンティティの以前のすべてのリビジョンを保存して、「履歴」情報として利用できる。
- 「デフォルト」リビジョンは、エンティティの正規のバリアントであり、特定のリビジョンが要求されていないときにロードされる。
- デフォルトのリビジョンへの変更のみが、新しいリビジョンの作成をトリガーせずに実行できる。
それ以外の場合、リビジョンデータは変更されない。 - 過去のリビジョンとは別に、デフォルトのリビジョンに反映されなかった変更を含む「保留中」のリビジョンが存在する可能性がある。
一般的に、これらのリビジョンには正規として受け入れられる前に、何らかの形式の承認を待っているデータが含まれている。
作成操作(Create)
エンティティの作成中に呼び出されるhookは次の通り。
hook_ENTITY_TYPE_create()
hook_entity_create()
読み取り/ロード操作(Read/Load)
エンティティのロード(読み取り)中に発生するhookやその他イベントの順序は次の通り。
- エンティティをストレージからロードする
-
postLoad()
がエンティティクラスで呼び出され、ロードされた全てのエンティティを渡す hook_ENTITY_TYPE_load()
hook_entity_load()
保存操作(Save)
エンティティの保存中に発生するhookやその他イベントの順序は次の通り。
-
preSave()
がエンティティオブジェクトとフィールドオブジェクトで呼び出される hook_ENTITY_TYPE_presave()
hook_entity_presave()
- エンティティがストレージに保存される。
-
postSave()
がエンティティオブジェクトで呼び出される -
hook_ENTITY_TYPE_insert()
(新規)またはhook_ENTITY_TYPE_update()
(更新) -
hook_entity_insert()
(新規)またはhook_entity_update()
(更新)
ノードの場合、postSave()
操作中に次のフックを呼び出す。
hook_node_access_records()
hook_node_access_records_alter()
編集操作(Edit)
エンティティの追加/編集フォームを使用してエンティティを追加または編集する場合、次のフックが呼び出される。
hook_entity_prepare_form()
hook_ENTITY_TYPE_prepare_form()
-
hook_entity_form_display_alter
(コンテンツエンティティのみ)
削除操作(Delete)
削除中には、次のフックおよびその他イベントが発生する。
-
preDelete()
がエンティティクラスから呼び出される hook_ENTITY_TYPE_predelete()
hook_entity_predelete()
- エンティティとフィールドの情報がストレージから削除される
-
postDelete()
がエンティティクラスで呼び出される hook_ENTITY_TYPE_delete()
hook_entity_delte()
エンティティの個々のリビジョンを削除した場合、次の操作とフックを呼び出す。
- リビジョンがロードされる(上記の読み取り/ロード操作を参照)
- リビジョンとフィールド情報がデータベースから削除される
hook_ENTITY_TYPE_revision_delete()
hook_entity_revision_delete()
表示/レンダリング操作(View/render)
レンダリング配列の構築操作中に呼び出されるフックは次の通り。
hook_entity_view_mode_alter()
hook_ENTITY_TYPE_build_defaults_alter()
hook_eintity_build_defaults_alter()
レンダリング操作中、デフォルトのエンティティビューアは、レンダリング前に次のフックと操作を実行する。
hook_entity_view_display_build_alter()
hook_entity_prepare_view()
- エンティティフィールドが読み込まれ、フォーマッタを使用してエンティティフィールドが作成される
hook_entity_display_build_alter()
hook_ENTITY_TYPE_view()
hook_entity_view()
hook_ENTITY_TYPE_view_alter()
hook_entity_view_alter()
ノードビュービルダーは特定のフックを呼び出す。
hook_node_links_alter()
他のエンティティタイプ
一部のタイプのエンティティは、特定操作でフックを呼び出す。
ノードの検索
hook_ranking()
- 一致するノードを見つけるためにクエリが実行される
- 結果のノードがロードされる
- ノードレンダー配列が構築される
-
comment_node_update_index()
が呼び出される hook_node_search_result()
インデックスノードの検索
- ノードがロードされる
- ノードレンダー配列が構築される
hook_node_update_index()