フックを理解する
フックは、モジュールが追加されたモジュールやDrupalコアのサブシステムと対話する方法の1つです。フックは、テンプレートファイルのプリプロセス変数(hook_preprocess())、情報リストの変更(hook_tokens_alter()、hook_views_data_alter())、フォームの操作(hook_form_alter())など、さまざまなタスクに使用されます。このページには、コアによって提供されるすべてのフックがリストされています。
モジュールは独自の追加フックを定義できます。たとえば、Flagモジュールはhook_flag_options_alter()を定義しており、既存のフラグのデフォルトオプションを変更したいモジュールが使用できます。フックを定義するほとんどのモジュールは、それらのドキュメントも提供しています。このドキュメントは*.api.phpファイルにあります。
フックは実行フローのさまざまなポイントで発生し、Drupalは有効なすべてのモジュールからのコントリビューションを探します。たとえば、ユーザーがDrupalサイトのヘルプページを訪問すると、Drupalはヘルプページを作成する際に、各モジュールに自分自身に関するドキュメントを提示する機会を与えます。これは、有効なすべてのモジュールをスキャンしてhook_help()の実装を探すことで行われます。つまり、mymodule_help($route_name, \Drupal\Core\Routing\RouteMatchInterface $route_match)という名前の関数です。ここで「mymodule」はモジュール名です。たとえば、blockモジュールのヘルプフックはblock_help()と呼ばれ、nodeモジュールのヘルプフックはnode_help()と呼ばれます。フックはパラメーターを提供できます;hook_helpの$route_nameパラメーターと$route_matchパラメーターにより、開発者はどのページでヘルプメッセージが表示されるかを判断できます。
フックは、イベントがアクションをトリガーするという意味で、イベントリスナーと見なすことができます。ノードの削除などのDrupalのイベントは、「hook_node_delete」フックをトリガーします。モジュールがhook_node_deleteを実装している場合、この関数はノードが削除されたときに実行されます。たとえば、関数の役割は全ノードの数を減らすことかもしれません。ノードが削除されると関数が呼び出され、数が1減ります。
Drupal APIリファレンスのモジュールフックの概要も参照してください。この優れた記事(Drupalのモジュール/フックシステムが単純なPHP構造/スニペットを使用してどのように機能するかを説明しています)もチェックしてみてください。