とても簡単です。symfony 2イベントシステムは強力であり、サービスタグがその役割を果たします。
- イベントを発生させたいクラスにディスパッチャを注入します。サービスIDは
event_dispatcher
;です。
- 必要に応じてイベントを
$this->dispatcher->dispatch('facebook.post_auth', new FilterFacebookEvent($args))
発生させます。
- 静的メソッド
EventSubscriberInterface
を定義して、を実装するサービスを作成します。getSubscribedEvents()
もちろん、あなたはfacebook.post_auth
イベントを聞きたいです。
したがって、静的メソッドは次のようになります。
static public function getSubscribedEvents()
{
return array(
'facebook.post_auth' => 'onPostAuthentication'
);
}
public function onPostAuthentication(FilterFacebookEvent $event)
{
// Do something, get the event args, etc
}
最後に、このサービスをディスパッチャのサブスクライバーとして登録します。タグ(例facebook.event_subscriber
)を付けてから、を作成しますRegisterFacebookEventsSubscribersPass
(このチュートリアルを参照)。コンパイラパスはすべてのタグ付きサービスを取得し、ループ内で次を呼び出す必要があります。
$dispatcher = $container->getDefinition('event_dispatcher');
$subscribers = $container->findTaggedServiceIds('facebook.event_subscriber');
foreach($subscribers as $id => $attributes) {
$definition->addMethodCall('addSubscriber', array(new Reference($id)));
}
このようにして、サービスにタグを付けるだけで、サブスクライバーをすばやく作成できます(たとえば、ロギング用)。