優先順位の設定イベントデータを関数のパラメーターとして取得イベントのディスパッチイベントの中止イベントの結果の取得コールバック及びリスナーの削除その他の情報イベントシステム¶メンテナンス性の高いアプリケーションの創造は、科学でもあり芸術でもあります。オブジェクトが疎結合すると同時に、高い凝集度も合わせ持つということです。他のオブジェクトがやるべき仕事をしようとはしないということを意味します。システム内の別の箇所とクリーンにやりとりすることが必要な場面も確かにあります。この目的を達成するのに便利なパターンです。何かを記録したりします。イベント駆動プログラミングに親しんでいることでしょう。管理される方法のいくつかの側面をエミュレートします。全てのリスナーに行き渡ります。イベントの伝播を止めることができます。状態とイベント自体を変更する機会を持ちます。親しんでいることになります。イベントの使用例¶ショッピングカートプラグインを構築していて、注文ロジックの操作を行いたい場合を考えてみましょう。ユーザーへのメール送信や在庫から商品を減らすことをショッピングのロジックに含めたくはありません。これらはプラグインを使用する人にとって重要なタスクです。フックを取り付けるためにコードを用意しなくてはならないので、多くの時間を費やすことを意味します。コードの関心事を明確に分離するためにイベントを使用することができます。イベントを使用しているプラグインにフックする関心事を追加することができます。モデルがあるとします。このアプリケーションで注文が作成される合間に通知したい。綺麗に保つためにイベントを使用できます。上記のコードは、注文が作成されていることをアプリケーションの別のパーツに通知することを簡単にできます。独立したオブジェクトの中で実行することができます。中でイベントはイベントマネージャーに対して動作します。使用して取得されます。$this->getEventManager();ビューやコントローラーで共有している各モデルは独立したイベントマネージャーを持ちます。ビューで作成されたイベントをコンポーネントやコントローラーに対して作用させることができます。任意のイベントを受け取ることができるグローバルイベントマネージャーを提供します。これは、面倒で難しい具体的なインスタンスに対してリスナーをアタッチする時に便利です。シングルトンインスタンスです。グローバルディスパッチャーに登録されたリスナーは、同じ優先度でインスタンスのリスナーよりも前に実行されます。静的メソッドを使用してグローバルマネージャーにアクセスすることができます。$aCallback);重要なことは、同じ名前で異なる内容を持っているイベントがあることを考慮すべきということです。チェックすることがいつも必要です。複雑さが増すことに注意してください。伝達させながら通知します。オフラインタスクに委任することもできます。イベントの追跡を有効にすることができます。EventList());マネージャーでイベントを実行した後は、イベントリストからそれを取得することができます。呼ぶことで無効にできます。コアイベント¶アプリケーションが受け取れるフレームワーク内のコアイベントが沢山あります。各レイヤーで、アプリケーションで使用できるイベントを発行します。イベントコントローラーイベントビューイベントリスナーの登録¶リスナーは、イベントのためにコールバックを登録するための好ましい方法です。実装することによって実現されます。クラスが処理するすべてのイベント名を持つ連想配列を返す必要があります。クラスがあると仮定しましょう。これは、リスナークラスを使うとても良い機会です。一ヶ所に統計ロジックを集中することでき、イベントに対して必要な反応ができます。リスナーは以下のように開始します。インスタンスを受け取ります。メソッドを使用して、正しいコールバックを追加します。バインドすることもできます。ログファイルに注文を書き込みたい場合、そのためには無名関数が使えます。サポートする呼び出し可能な形式を使用することもできます。デフォルトのイベントにイベントリスナーを活用することができます。ユーザーからのお問い合わせフォームを扱う「UserFeedback」プラグインを例にあげましょう。それに基づいて行動したいと思います。受け取ることができことができます。本当に必要とするイベントのみ受け取ることができます。管理者のメールを送信することができます。メソッドを使用してください。});リスナーオブジェクトをバインドするために、これと同じアプローチを使用することができます。ある動作の基礎として使用できます。イベントリスナーが存在する場合のロジックを実行。存在するリスナーを削除。イベントリスナーが存在しない場合のロジックを実行。メソッドに渡されたパターンは、大文字と小文字が区別されます。メソッドは、検索パターンに一致するイベントの配列を返します。優先順位の設定¶いくつかのケースでは、リスナーを実行する順番を制御したいこともあるでしょう。例としてユーザーの統計情報の場合についてもう一度考えて見ましょう。スタックの最後に呼び出されることが理想的です。イベントがキャンセルされなかったことや、他のリスナーが例外を発生させていないことを確認できます。オブジェクトの最終状態を得ることができます。優先順位は、リスナーに追加する際に整数値として定義されます。後に実行されるメソッドです。小さい任意の値を使用することで動作します。大きい数字を使用してください。2つのコールバックが同じ優先順位キューに割り当てられるた場合は、追加された順番に実行されます。関数内での宣言を行います。呼び出し可能なメソッドと優先順位を指定するために配列を使用する必要があるということです。読み込むであろう、特別な配列エントリーです。リスナーの引数に変換されます。コールバックの例です。コールバックのリスナーは、次のシグネチャを持つ必要があります。$viewFileName)イベントコンストラクターに渡される各値は、データ配列に表示されている順序で関数のパラメーターに変換されます。結果が、関数の引数の順序を決定します。無効にすることはできません。イベントをディスパッチできます。クラスのインスタンスを受け取ります。さぁ、イベントをディスパッチしてみましょう。イベントをディスパッチする前に、イベントリスナーをインスタンス化する必要があります。新しいイベントの作成とディスパッチ。コンストラクターに3つの引数を受け取ります。最初のものはイベント名で、読みやすくすると同時にできるだけ唯一性を維持することを心掛けてください。