0

我用 Zend FW 2 做一个安静的 web 服务。我怎样才能创建一个系统,检查 ie。每次调用 REST 时的 API 密钥?在每个功能中检查每个控制器中的密钥当然不是要走的路,所以我在寻找“全局”的东西。

谢谢!

4

1 回答 1

2

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

在您的模块引导程序中注册监听器,例如假设您向模块添加ApiControllerApplication一个

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();
于 2013-03-06T12:51:06.897 回答