如何解决zf3侦听另一个类中触发的事件
我坚持了一段时间。 触发各种事件时,我为每个实体提供服务
例如,ArticleService中的 saveArticle 方法
$this->triggerEvent('articleSaved',['saved' => $entity]);
然后我像下面创建一个单独的侦听器
class ArticleSavedListener implements ListenerAggregateInterface
{
// ...
public function attach(EventManagerInterface $events,$priority = 100)
{
$this->listeners[] = $events->attach(
Events::ARTICLE_SAVED,[$this,'onSaved'],$priority
);
}
public function onSaved($event)
{
//logic here
}
}
然后在Module.php中注册
class Module
{
public function onBootstrap()
{
$application = $e->getApplication();
$serviceManager = $application->getServiceManager();
$eventManager = $application->getEventManager();
$articleService = $serviceManager->get(ArticleService::class);
$articleSavedListener = $serviceManager->get(ArticleSavedListener::class);
$articleSavedListener->attach($articleService->getEventManager());
}
}
重点是我需要创建一个通用类(侦听器),以低优先级监听所有特定事件的列表。但是自从我宣布它们为私有以来,我所读的内容无法在注册的类范围之外听。
请帮助。
解决方法
通过在我所有的mapper服务工厂$container->get('EventManager')
中注入默认的EventManager来解决它……也许不是我所期望的,但没有其他选择
例如 HelpCenter \ Service \ AbstractServiceFactory.php
class AbstractServiceFactory implements FactoryInterface
{
// ...
/**
* @param ContainerInterface $container
* @param string $requestedName
* @param array|null $options
* @return mixed|object
*/
public function __invoke(ContainerInterface $container,$requestedName,array $options = null)
{
$objectManager = $container->get('doctrine.documentmanager.odm_default');
$moduleOptions = $container->get(ModuleOptions::class);
$logger = $container->get('app_logger');
$eventManager = $container->get('EventManager');
/* @var $service AbstractServiceInterface */
$service = new $requestedName($objectManager,$moduleOptions);
$service->setLogger($logger);
$service->setEventManager($eventManager);
return $service;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。