ホームページ > バックエンド開発 > PHPチュートリアル > Drupal 8フックとSymfonyイベントディスパッチャー

Drupal 8フックとSymfonyイベントディスパッチャー

Jennifer Aniston
リリース: 2025-02-19 09:49:09
オリジナル
787 人が閲覧しました

DRUPAL 8:フックからシンフニーのイベントディスパッチャーへの移行

Drupal 8の多数のSymfonyコンポーネントの採用は、従来のDrupal方法論から現代のPHPアーキテクチャパターンへの移行を意味します。 この移行には、フックシステムをプラグイン、注釈、および強力なSymfonyイベントディスパッチャーに徐々に置き換えることが含まれます。

Drupal 8 Hooks and the Symfony Event Dispatcher

Symfonyイベントディスパッチャーにより、アプリケーションコンポーネントは、イベントの派遣と取り扱いにより、手続き型フックシステムよりも柔軟で分離された拡張メカニズムを提供することができます。 Drupal 8は、特定のイベントを聴くイベントサブスクライバークラスを採用することにより、これを活用します。 これらのクラスは

を実装し、A EventSubscriberInterfaceメソッドを定義し、購読するイベントの配列を返します。 getSubscribedEvents Drupal 8ではフックが持続しますが、多くの人がプラグイン、注釈、イベントディスパッチャーに取って代わられたため、それらの使用が減少しました。 ただし、特定のコア相互作用にはフックが重要です。 推奨事項は、リスナーの優先順位付け、イベントの伝播の停止、イベントデータの変更など、柔軟性と機能が強化されているため、実行可能なときはいつでもSymfonyイベントディスパッチャーを支持することです。 (注:元の記事のコードの例は、進行中のDrupal 8開発のために更新が必要になる場合があります。)

イベントディスパッチャーを理解する

Symfony Webサイトで説明されているように、Symfonyイベントディスパッチャーは、イベントの派遣とリスニングを介して通信するためのアプリケーションコンポーネントのツールを提供します。 この記事では、Drupal 8の実装に焦点を当てています。 (その原則を包括的に理解するために、Symfonyのドキュメントを参照してください。)

実用的な例:

モジュール

この例では、カスタムDrupal 8モジュール(

)のイベントディスパッチャーを示しています。このモジュールには、2つのフィールドを持つ構成フォームが含まれています。 保存すると、構成オブジェクトを含むイベントがディスパッチされ、他のコンポーネントが持続前にインターセプトして変更できます。 最後に、イベントのサブスクライバーは、このイベントを聞いて反応することを示しています。 (DRUPAL 8モジュール開発の基本については、関連するチュートリアルを参照してください。)event_dispatcher_demo

フォーム( event_dispatcher_demo 2つのテキストフィールド(および

)を備えた単純な構成フォームが作成されます。 ルート(DemoForm.php)を使用すると、URLを介してアクセスできます(例:

)。 イベントディスパッチャーの統合(

my_name my_websiteフォームの送信ハンドラー(event_dispatcher_demo.routing.yml)には次のものが含まれています

  1. イベントディスパッチャーサービスの取得:$dispatcher = Drupal::service('event_dispatcher');(生産コードでは依存関係の注入が推奨されます)。
  2. クラス)を作成し、構成オブジェクトを渡す。 イベントの派遣:DemoEventEvent 返されたイベントから変更された構成を取得し、保存します。
  3. $dispatcher->dispatch('demo_form.save', $e);
  4. class(
  5. )は単に構成オブジェクトを保持し、getter/setterメソッドを提供します。 イベントサブスクライバー(

このクラスはDemoEventを実装します。 DemoEvent.phpイベントをリッスンするための

メソッドを登録します。

既存の構成値に基づいて新しい構成値を追加します。 ConfigSubscriber.phpタグを備えたサービス定義(

)は、このサブスクライバーを登録します。

Drupal 8EventSubscriberInterfaceのフック getSubscribedEvents比較のために、この例は、フックを使用して同様の機能を達成する方法も示しています。 onConfigSaveメソッドは、demo_form.saveサービスを使用してonConfigSaveフックを呼び出すように変更されています。サンプルフックの実装(event_dispatcher_demo.services.yml)は、構成値を追加することを示しています。 event_subscriber結論

Symfonyイベントディスパッチャーは、従来のフックシステムと比較して、Drupal 8機能を拡張するためのより堅牢で保守可能なアプローチを提供します。フックは残っていますが、イベントディスパッチャーは新しい開発のための推奨される方法であり、より良い柔軟性、テスト可能性、およびコード組織を提供します。 このシフトは、Drupalが現代のPHPベストプラクティスを採用したことを反映しています。

よくある質問(FAQ)

submitForm元の記事のFAQセクションはすでに十分に構造化されており、Drupal 8フックとSymfonyイベントディスパッチャーの違いと使用に関する一般的な質問に包括的に答えています。 ここには変更は必要ありません。demo_config_save

以上がDrupal 8フックとSymfonyイベントディスパッチャーの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート