ZendFramework-イベントマネージャー
最新のアプリケーションにはすべて、堅牢で柔軟なイベントコンポーネントが必要です。Zend Frameworkは、そのようなコンポーネントの1つを提供します。zend-eventmanager。zend-eventmanagerは、高レベルのアーキテクチャーの設計を支援し、サブジェクト/オブザーバーパターンとアスペクト指向プログラミングをサポートします。
イベントマネージャをインストールする
イベントマネージャは、を使用してインストールできます。 Composer 以下に指定されているように-
composer require zendframework/zend-eventmanager
イベントマネージャーの概念
イベントマネージャーのコアコンセプトは次のとおりです-
Event −イベントは任意の名前のアクションです。 greet。
Listener−PHPコールバック。それらはイベントに添付され、イベントがトリガーされると呼び出されます。リスナーのデフォルトの署名は-です。
function(EventInterface $e)
EventInterface Class−イベント自体を指定するために使用されます。名前(set / getName)、ターゲット(get / setTarget)、パラメーター(get / setParams)などのイベント情報を設定および取得するメソッドがあります。
EventManager class− EventManagerのインスタンスは、アプリケーションとそれに対応するリスナーで定義されたすべてのイベントを追跡します。EventManagerはメソッドを提供します。attach リスナーをイベントにアタッチし、メソッドを提供します。 trigger事前定義されたイベントをトリガーします。トリガーが呼び出されると、EventManagerはそれに接続されているリスナーを呼び出します。
EventManagerAwareInterface−イベントベースのプログラミングをサポートするクラスの場合、EventManagerAwareInterfaceを実装する必要があります。それは2つの方法を提供します、setEventManager そして getEventManager イベントマネージャを取得して設定します。
例
イベントマネージャの概念を理解するための簡単なPHPコンソールアプリケーションを作成しましょう。以下の手順に従ってください。
「eventapp」フォルダを作成します。
インストール zend-eventmanager 作曲家を使用します。
PHPファイルを作成する Greeter.php 「eventapp」フォルダ内。
クラスを作成する Greeter を実装します EventManagerAwareInterface。
require __DIR__ . '/vendor/autoload.php';
class Greeter implements EventManagerAwareInterface {
// code
}
ここに、 require Composerにインストールされているすべてのコンポーネントを自動ロードするために使用されます。
書きます setEventManager クラスのメソッド Greeter 以下に示すように-
public function setEventManager(EventManagerInterface $events) {
$events->setIdentifiers([ __CLASS__, get_called_class(),]);
$this->events = $events;
return $this;
}
このメソッドは、現在のクラスを指定されたイベントマネージャー($ events引数)に設定してから、イベントマネージャーをローカル変数に設定します $events。
次のステップは書くことです getEventManager クラスのメソッド Greeter 以下に示すように-
public function getEventManager() {
if (null === $this->events) {
$this->setEventManager(new EventManager());
}
return $this->events;
}
このメソッドは、ローカル変数からイベントマネージャーを取得します。使用できない場合は、イベントマネージャのインスタンスを作成して返します。
メソッドを書いて、 greet、 クラスで Greeter。
public function greet($message) {
printf("\"%s\" from class\n", $message);
$this->getEventManager()->trigger(__FUNCTION__, $this, $message ]);
}
このメソッドは、イベントマネージャーを取得し、それに関連付けられたイベントを起動/トリガーします。
次のステップは、のインスタンスを作成することです Greeter クラスを作成し、そのメソッドにリスナーをアタッチします。 greet。
$greeter = new Greeter();
$greeter->getEventManager()->attach('greet', function($e) {
$event_name = $e->getName();
$target_name = get_class($e->getTarget());
$params_json = json_encode($e->getParams());
printf("\"%s\" event of class \"%s\" is called." .
" The parameter supplied is %s\n",
$event_name,
$target_name,
$params_json);
});
リスナーコールバックは、イベントの名前、ターゲット、および指定されたパラメーターを出力するだけです。
の完全なリスト Greeter.php 次のとおりです-
<?php
require __DIR__ . '/vendor/autoload.php';
use Zend\EventManager\EventManagerInterface;
use Zend\EventManager\EventManager;
use Zend\EventManager\EventManagerAwareInterface;
class Greeter implements EventManagerAwareInterface {
protected $events;
public function setEventManager(EventManagerInterface $events) {
$events->setIdentifiers([__CLASS__, get_called_class(), ]);
$this->events = $events;
return $this;
}
public function getEventManager() {
if (null === $this->events) {
$this->setEventManager(new EventManager());
}
return $this->events;
}
public function greet($message) {
printf("\"%s\" from class\n", $message);
$this->getEventManager()->trigger(__FUNCTION__, $this, [$message ]);
}
}
$greeter = new Greeter();
$greeter->greet("Hello");
$greeter->getEventManager()->attach('greet', function($e) {
$event_name = $e->getName();
$target_name = get_class($e->getTarget());
$params_json = json_encode($e->getParams());
printf("\"%s\" event of class \"%s\" is called." . " The parameter supplied is %s\n",
$event_name,
$target_name,
$params_json);
});
$greeter->greet("Hello");
次に、コマンドプロンプトphpでアプリケーションを実行します Greeter.php 結果は次のようになります-
"Hello" from class
"Hello" from class
"greet" event of class "Greeter" is called. The parameter supplied is ["Hello"]
上記のサンプルアプリケーションは、イベントマネージャの基本のみを説明しています。イベントマネージャは、次のような多くのより高度なオプションを提供します。Listener Priority, Custom Callback Prototype / Signature, Short Circuiting, など。イベントマネージャーは、ZendMVCフレームワークで広く使用されています。