1

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);

解決策を教えてください

4

2 に答える 2