我有一个带有findAll()函数的mapper类“User”。
public function findAll()
{
/**
* Fetch records from table 'User'
*@author Administrator
*/
$this->getEventManager()->trigger('find', $this, array('entity' => $entity));
return $entity;
}
这里我正在触发一个用户模块类
监听的事件public function onBootstrap(MvcEvent $event)
{
$eventManager = $event->getApplication()->getEventManager();
$sharedEventManager = $eventManager->getSharedManager();
$sm = $event->getApplication()->getServiceManager();
$sharedEventManager->attach('ZfcUser\Mapper\User', 'find', function($e) {
/*
Access log create object
*/
}, 100);
}
我真的希望将日志记录添加到数据库中,我准备了一个服务来返回一个能够将此记录写入DB的对象。
public function getServiceConfig() {
return array(
'factories' => array(
'Dblogger' => function($sm) {
$logger = $sm->get('logger');
$plugin = new Controller\Plugin\Log;
$plugin->setLogger($logger);
return $plugin;
},
),
);
}
使用此服务,我所要做的就是调用此方法
$sm = $event->getApplication()->getServiceManager();
$logger = $sm->get('Dblogger');
$logger->Debug('View the user list');
但我的问题是,无论如何都无法在此闭包函数中调用此服务
$sharedEventManager->attach('ZfcUser\Mapper\User', 'find', function($e) {
/*
Access log create object
*/
}, 100);
请帮我解决问题
答案 0 :(得分:3)
public function onBootstrap(MvcEvent $event)
{
$eventManager = $event->getApplication()->getEventManager();
$sharedEventManager = $eventManager->getSharedManager();
$sm = $event->getApplication()->getServiceManager();
$sharedEventManager->attach('ZfcUser\Mapper\User', 'find', function($e) use ($sm) {
/*
Access log create object
*/
$sm->....
}, 100);
}
答案 1 :(得分:1)
可能有一个更清洁的解决方案,但我只是use
:
$sEM->attach('Namespace', 'eventName', function(Event $e) use ($serviceManager) {
$serviceManager->get('fooBar');
});