0

Zend FW 2 で安らかな Web サービスを作成しています。RESTが呼び出されるたびにAPIキー? もちろん、すべての機能のすべてのコントローラーのキーをチェックするのは道ではないので、「グローバル」なものを探しています。

ありがとう!

4

1 に答える 1

2

すべての残りのメソッドが1つのコントローラーにあると仮定すると、そのコントローラーのディスパッチイベントをリッスンでき、高い優先度を使用してチェックが早期に行われます...

モジュールのブートストラップにリスナーを登録します。たとえば、モジュールに を追加した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
}

注意点として、クロージャーに渡されるイベントには、コントローラーのインスタンスがターゲットとして含まれているため、API チェックを行うために ServiceManager からサービスを取得する必要がある場合は、コントローラー自体の場合と同じように行うことができます。 ..

 $controller = $e->getTarget();
 $sm = $controller->getServiceLocator();
于 2013-03-06T12:51:06.897 に答える