ZF2 - 用户身份验证插件

时间:2013-06-11 10:09:02

标签: php zend-framework2

我已经在基于Skeleton应用程序的ZF2应用程序中实现了用于用户身份验证控制的插件。

由于在ZF2开始时没有完全定义多个模块,我在Application \ src 3文件夹中创建了名为Admin,Application和User的文件夹,它们有自己的模型,控制器,表单和命名空间。

我创建了一个名为UserAuthentication的插件类,它从Zend\Mvc\Controller\Plugin\AbstractPlugin扩展而来,并在Module.php文件中附加了eventManager

public function onBootstrap(MvcEvent $e) {
    $e->getApplication()->getServiceManager()->get('translator');
    $eventManager        = $e->getApplication()->getEventManager();
    $moduleRouteListener = new ModuleRouteListener();
    $moduleRouteListener->attach($eventManager);
    var_dump('OnBootstrap');
    $eventManager->attach('dispatch', array($this, 'loadConfiguration'), 2);
}

public function loadConfiguration(MvcEvent $e) {
    $application   = $e->getApplication();
    $sm            = $application->getServiceManager();
    $sharedManager = $application->getEventManager()->getSharedManager();
    var_dump('loadConfiguration');
    $sharedManager->attach('Zend\Mvc\Controller\AbstractActionController','dispatch',
            function($e) use ($sm) {
                var_dump('attach');
                return $sm->get('ControllerPluginManager')->get('userAuthentication')->preDispatch($e);
            }
    );
}

我的问题如下:
此插件适用于名称空间Admin\Controller中的控制器,但不适用于应用程序的控制器(名称空间Application\Controller)。 这打破了我的头脑。

正如您在代码段中所看到的,我已经编写了多个var_dump()来跟踪错误,对于应用程序的控制器,这一行似乎没有被执行:

$sharedManager->attach('Zend\Mvc\Controller\AbstractActionController','dispatch',
        function($e) use ($sm) {
            var_dump('attach');
            return $sm->get('ControllerPluginManager')->get('userAuthentication')->preDispatch($e);
        }
);



修改
我找到了解决方案。
在默认情况下优先级为1的事件之间存在优先级问题。 只需在此功能上添加其他参数:

$sharedManager->attach('Zend\Mvc\Controller\AbstractActionController','dispatch',
        function($e) use ($sm) {
            var_dump('attach');
            return $sm->get('ControllerPluginManager')->get('userAuthentication')->preDispatch($e);
        }, 2  /**<--- Priority parameter **/
);

0 个答案:

没有答案