Zend\EventManager\EventManagerAwareTrait
または inherit fromを使用するZfcBase\EventManager\EventProvider
と、リッスンする独自のイベント識別子を指定できます。
EventManagerAwareTrait::setEventManager()
ここでメソッドに含まれるコードを見ると
https://github.com/zendframework/zf2/blob/master/library/Zend/EventManager/EventManagerAwareTrait.php#L44-L54
そしてZfcBase\EventManager\EventProvider::setEventManager()
ここにも
https://github.com/ZF-Commons/ZfcBase/blob/master/src/ZfcBase/EventManager/EventProvider.php#L26-L37
このメソッドは、文字列または文字列の配列であると想定して、 という名前のプロパティを自動的に探します。$eventIdentifier
存在する場合は、FQCN およびクラス名の既定の識別子とマージされます。
したがって、基本的には、イベント マネージャー対応のクラス (イベントをトリガーするクラス) にプロパティを追加するだけで、独自の識別子を追加できます。
<?php
namespace Somenamespace;
use Zend\EventManager\EventManagerAwareInterface;
class EventTriggeringClass implements EventManagerAwareInterface
{
use \Zend\EventManager\EventManagerAwareTrait;
protected $eventIdentifier = 'SendMailIdentifier';
}
と
namespace Someothernamespace;
use Zend\EventManager\EventManagerAwareInterface;
class SomeOtherEventTriggeringClass implements EventManagerAwareInterface
{
use \Zend\EventManager\EventManagerAwareTrait;
protected $eventIdentifier = 'SendMailIdentifier';
}
リスナーはSendMailIdentifier
、特定のクラスの FQCN をターゲットにするのではなく、にアタッチするだけで済みます。
もちろん、FQCN は setEventManager メソッドによってマージされた識別子の 1 つであるため、必要に応じて FQCN にアタッチすることもできます。