无法通过查看ZfcUser用户映射器代码找到事件

时间:2016-09-12 02:01:15

标签: php zend-framework zend-framework2 zfcuser zend-framework3

我正在阅读UserMapper中的ZfcUser Zend Framework Module代码,因为我认为我可以在构建我之前获得使用zends auth系统的一般概念并对某些事情感到好奇。

在第19行的(click here)中,我们有以下代码:

$this->getEventManager()->trigger('find', $this, array('entity' => $entity));

我真的想知道在哪里可以找到被触发的“查找”事件,或者它是未来可能发现事件的占位符

我查看了模块文件和其他一些文件,无法找到它

1 个答案:

答案 0 :(得分:1)

Zfcuser是一个非常完整的模块,具有很多功能,在正常的基本身份验证中你不需要。这些功能包括ZfcUser触发但不需要它的几个事件,只是用户需要对此事件执行特定操作。

此外,ZfcUser可以与BjyAuthorizeroleuserbridge等其他模块一起使用,以提供更多功能(acl和用户角色管理...),这些第三方模块可以使用ZfcUser触发的事件。

例如,您要记录每个用户身份验证,您可以在authenticate方法中使用onBootstrap()事件:(来自here的示例):

$sm = $e->getApplication()->getServiceManager();
$zfcAuthEvents = $e->getApplication()->getServiceManager()->get('ZfcUser\Authentication\Adapter\AdapterChain')->getEventManager();

$zfcAuthEvents->attach( 'authenticate', function( $authEvent ) use( $sm ){
    try {
        $remote     = new \Zend\Http\PhpEnvironment\RemoteAddress;
        $remote->setUseProxy( true );

        $mapper     =  $sm->get( 'auth_log_mapper' );
        $log_entity = new \FooUser\Entity\UserAuthenticationLog;
        $log_entity->populate(
                array(
               'user_id'       => $authEvent->getIdentity(),
                'auth_time'     => new \DateTime( "now" ),
                'ip_address'    => $remote->getIpAddress()
            )
        );

        $mapper->save( $log_entity );
        return true;
    } catch( \Exception $x ) {
        // handle it
    }
});

因此find事件可能对ZfcUser没有用处,它不是此模块未来开发的占位符,如果你需要做一些事情,它对你来说是一个钩子。用户可以在用户存储库中找到...