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