Zend Framework 2 Restful Web服务:跨控制器的通用功能

时间:2013-03-06 11:22:45

标签: php rest zend-framework2

我正在使用Zend FW 2创建一个安静的Web服务。我如何创建一个系统,检查即。每次调用REST时都会调用API密钥?当然,在每个功能中检查每个控制器中的键不是要走的路,所以我正在寻找“全局”的东西。

谢谢!

1 个答案:

答案 0 :(得分:2)

假设你所有的休息方法都在一个控制器中,你可以使用高优先级监听控制器调度事件,所以早期检查...

在模块引导程序中注册侦听器,例如,假设您向ApiController模块添加了Application

public function onBootstrap(EventInterface $e)
{
    $app = $e->getApplication();
    // get the shared events manager 
    $sem = $app->getEventManager()->getSharedManager();
    // listen to dispatch event when triggered by the ApiController
    $sem->attach('Application\Controller\ApiController', 'dispatch', function($e) {
        // do your api key checks

        // if checks fail get the response from the controller
        $controller = $e->getTarget();
        $response = $controller->getResponse();
        $response->setStatusCode(401);
        // return $response, short circuiting dispatch event
        return $response;
    }, 9000); // 9000 = high priority, do this early
}

注意,传递给你的闭包的事件包含你的控制器的一个实例作为其目标,所以如果你需要从ServiceManager获取服务来执行api检查,你就可以像控制器本身一样,即......

 $controller = $e->getTarget();
 $sm = $controller->getServiceLocator();