如果您使用Zend\EventManager\EventManagerAwareTrait
或继承自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 方法合并的标识符之一。