概要
EventManger は、次のユースケース向けに設計されたコンポーネントです:
クイックスタート
通常は、クラス内に EventManager を作成します。
上記のコードにより、ユーザーは EventManager インスタンスにアクセスしたり、新しいインスタンスでリセットしたりできます。インスタンスが存在しない場合は、使用時に遅延インスタンス化されます。
EventManager は、何らかのイベントをトリガーしたかどうかのみに関心があります。基本的なトリガーは、イベント名 (通常は現在の関数/メソッド名)、コンテキスト (通常は現在のオブジェクト インスタンス)、およびパラメーター (通常は現在の関数/メソッドに提供されるパラメーター) の 3 つのパラメーターを受け入れます。 。
順番に、イベントのトリガーでは、何かがイベントをリッスンしているかどうかのみが考慮されます。リスナーが EventManager に追加され、通知される特定のイベントとコールバックを指定します。コールバックは、イベント名、コンテキスト、パラメーターを取得するためのアクセサーを備えた Event オブジェクトを受け入れます。リスナーを追加してイベントを発生させましょう。
attach() の 2 番目の引数は有効なコールバックであることに注意してください。この例では、自己完結型を維持するための匿名関数が示されています。ただし、有効な関数名、関数オブジェクト、静的メソッドを参照する文字列、または特定の静的メソッドまたはインスタンス メソッドを持つコールバック配列を使用することもできます。繰り返しますが、PHP コールバックはすべて有効です。
場合によっては、EventManager クラスのオブジェクト インスタンスを作成せずにリスナーを指定したい場合があります。 Zend Framework は、SharedEventCollection の概念を通じてこれを実装します。簡単に言えば、よく知られている SharedEventCollection を使用してスタンドアロンの EventManager インスタンスを挿入すると、EventManager インスタンスに対して追加のリスナーがクエリされます。 SharedEventCollection に追加されるリスナーは通常のイベント マネージャーとほぼ同じです。attach の呼び出しは EventManager とまったく同じですが、最初に追加のパラメーター (指定されたインスタンス) が必要です。 EventManager のインスタンスを作成するときに、どのように __CLASS__ を渡したかを思い出してください。 SharedEventCollection を使用する場合、その値、またはコンストラクターに提供する配列内の任意の文字列を使用してインスタンスを識別することができます。たとえば、SharedEventManager インスタンスが EventManager インスタンスに (依存関係注入などによって) 注入されたことがわかっていると仮定すると、共有コレクションを介して追加するように上記の例を変更できます。
注意: StaticEventManager
2.0.0beta3 では、StaticEventManager シングルトンを SharedEventCollection として使用できます。こうすることで、SharedEventCollection にアクセスする場所や方法を心配する必要がなく、StaticEventManager::getInstance() を呼び出すだけでグローバルに利用できます。ただし、フレームワークではその使用が非推奨となっていることに注意してください。2.0.0beta4 では、SharedEventManager インスタンスを構成し、それを別の EventManager インスタンスに挿入することによって置き換えられます。
ワイルドカードリスナー
場合によっては、特定のインスタンスの多くまたはすべてのイベントに同じリスナーを追加したり、共有イベント コレクション、多くのコンテキスト、および多くのイベントを使用したりすることが必要な場合があります。 EventManager コンポーネントによりこれが可能になります。
複数のイベントを一度に追加
ワイルドカードで追加
上記のコードは、トリガーがトリガーされるたびに、この特定のリスナーに通知が送信されることを指定します。
SharedEventManager を通じて複数のイベントを一度に追加します
優先度を指定すると、その優先度が指定されたすべてのイベントに使用されることに注意してください。
SharedEventManager を介してすべてのイベントを一度に追加します
優先度を指定すると、その優先度が指定されたすべてのイベントに使用されることに注意してください。
上記のコードはコンテキスト「foo」と「bar」を指定しており、イベントがトリガーされると指定されたリスナーに通知されます。
設定オプション
イベントマネージャーのオプション
識別子
指定された EventManager インスタンスは、SharedEventManager 経由でアクセスされると、文字列または文字列の配列に応答できます。
イベントクラス
リスナーに渡されるイベントを表すために使用される代替 Event クラス名。
共有コレクション
イベントがトリガーされたときの SharedEventCollection インスタンス。
利用可能な方法
__構築
__construct(null|string|int 識別子)
コレクションを共有する目的で、指定された識別子 (指定されている場合) を使用して、新しい EventManager インスタンスを構築します。
setEventClass
setEventClass(string $class)
トリガーされたリスナーに渡されるイベントを作成するときに使用する置換イベント クラス名を提供します。
共有コレクションの設定
setSharedCollections(SharedEventCollection $collections=null)
イベントがトリガーされたときに使用される SharedEventCollection インスタンス。
共有コレクションを取得
getSharedCollections()
現在追加されている SharedEventCollection インスタンスを返します。コレクションが追加されない場合は、空または SharedEventCollection インスタンスを返します。
トリガー
トリガー(文字列 $event、混合 $target、混合 $argv、コールバック $callback)
指定されたイベントのすべてのリスナーをトリガーします。 $event には現在の関数/メソッド名を使用し、必要に応じて「.pre」、「.post」などを続けることをお勧めします。 $context は、現在のオブジェクトのインスタンス、またはオブジェクトを使用してトリガーされない場合は関数の名前である必要があります。 $params は通常、連想配列または ArrayAccess インスタンスにする必要があります。関数/メソッドに渡されるパラメーターを使用することをお勧めします (ここでは、compact() が便利です)。このメソッドはコールバックを受け入れることもでき、triggerUntil() と同じように動作します。
メソッドは、ResponseCollection のインスタンスを返します。これは、さまざまなリスナーから返された値のイントロスペクト、短絡のテストなどに使用できます。
トリガーまで
triggerUntil(string $event、mixed $context、mixed $argv、コールバック $callback)
trigger() と同様に、指定されたイベントのすべてのリスナーをトリガーします。ただし、各リスナーの戻り値を $callback に渡します。$callback がブール値の true を返した場合、リスナーの実行は終了します。 $result->stopped() を使用してこれをテストできます。
添付
attach(string $event, コールバック $callback, int $priority)
イベント $event をリッスンするために $callback を EventManager インスタンスに追加します。 $priority が指定されている場合、リスナーはその優先順位を使用して内部リスナー スタックに挿入され、より高い値が最初に実行されます。 (デフォルトの優先度は「1」で、負の値で実行されます。)
メソッドは ZendStdlibCallbackHandler のインスタンスを返します。この値は、必要に応じて後で detach() に渡すことができます。
集計を添付
attachAggregate(string|ListenerAggregate $aggregate)
文字列が $aggregate として渡された場合、そのクラスをインスタンス化します。その後、$aggregate が EventManager インスタンスのattach() メソッドに渡され、リスナーを登録できるようになります。
ListenerAggregate インスタンスを返します。
切り離す
デタッチ(CallbackHandler $listener)
すべてのリスナーをスキャンし、$listener に一致するリスナーの一致を解除して、リスナーがトリガーされなくなるようにします。
リスナーが割り当てられてサブスクライブ解除されている場合は true ブール値を返し、それ以外の場合は false ブール値を返します。
集約を切り離す
detachAggregate(ListenerAggregate $aggregate)
すべてのイベントをループして、コレクションが表すリスナーを決定します。すべての一致について、リスナーは削除されます。
リスナーが識別されてサブスクライブ解除されている場合は true ブール値を返し、それ以外の場合は false ブール値を返します。
イベントを取得
getEvent()
リスナーによって付加されたすべてのイベント名を含む配列を返します。
getListeners
getListeners(string $event)
$event に追加されたすべてのリスナーの ZendStdlibPriorityQueue インスタンスを返します
クリアリスナー
clearListeners(string $event)
$event に追加されたすべてのリスナーを削除します。
Args を準備する
prepareArgs(array $args)
提供された $args から ArrayObject を作成します。これは、リスナーがパラメータを変更できるようにして、後のリスナーまたはトリガーされたメソッドがこれらの変更を確認できるようにする場合に便利です。
貴重なスペースをお借りして、zend フレームワーク 2 についての交換と学習のための回答を差し上げたいと思います。ここに来て、もう少し人がいます。グループ番号 213966183
知っておくと良いです