web-dev-qa-db-ja.com

フックではなくイベントサブスクライバーを使用する方が良い理由

drupal 8では、イベントサブスクライバーを使用できるようになりました。その理由は何ですか?新しいキャッシュAPIでよりうまく機能するためですか?

最近、表示されたときにノードからデータを抽出する必要がありましたが、hook_node_view()は(ほとんどすべてのように)キャッシュされ、Drupal 8にキャッシュされます。イベントサブスクライバーの使用なぜイベントサブスクライバーを使用する方が優れたソリューションなのですか?それは、オブジェクト指向であることだけですか?

5
Kevin howbrook

これは2つの観点から見ることができます。最初にDrupalと通信する方法を探している人は、存在するフックとイベントを使用しています。2番目は、これらのAPIを設計する開発者のものです。

Drupalは両方の中間にあり、一方はDrupalはSymfony APIのコンシューマーであり、ほとんどすべてのコードはSymfonyイベントに配置され、もう一方はDrupalは、レガシーフックまたはカスタムのSymfonyイベント、およびプラグインのような他のメソッドの形式でAPIを提供します。

Drupal APIのいずれかを使用していない可能性があります。SymfonyカーネルイベントKernelEvents::REQUEST。次に、Drupal開発者と同じ位置にいます。Symfonyはフックを提供していないため、これはフックやイベントに関する質問ではありません。

Drupal APIのいずれかを使用している場合でも、選択肢は多くありません。提供されているものを選択する必要があります。対話するためにモジュールでAPIを設計する場合のみ他のモジュールでは、イベントまたはフックを選択できます。

6
4k4