findAll() 関数を持つマッパークラス「ユーザー」があります。
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);
解決策を教えてください