0

我尝试使用 Zend 框架 2.2 为我的一个模块进行 http 身份验证,我的代码受到官方文档的强烈启发,其中有:

    $request=$this->getRequest();
    $response=$this->getResponse();

    assert($request instanceof Zend\Http\Request);
    assert($response instanceof Zend\Http\Response);

问题是断言错误,似乎 $request 和 $response 来自另一个类,所以我的脚本不起作用。如何从我的控制器中的 Zend\Http\Request|Response 获取请求和响应?

非常感谢。

4

1 回答 1

1

如果您想为整个模块设置 HTTP 身份验证,请执行以下操作(至少我是如何做到的):

在 Module.php 中:

    public function onBootstrap(MvcEvent $e){
        $sharedEvents=$e->getApplication()->getEventManager()->getSharedManager();
        $sharedEvents->attach(__NAMESPACE__,MvcEvent::EVENT_DISPATCH, array($this, 'authHttp'));
    }


    public function authHttp(MvcEvent $e){

        $serviceManager = $e->getApplication()->getServiceManager();

        $request=$e->getRequest();
        $response=$e->getResponse();

        if(!(
          $request instanceof \Zend\Http\Request
          && $response instanceof \Zend\Http\Response
          )){
          return; // we're not in HTTP context - CLI application?
          } 

        // Your adapter with config/password etc...
        $authAdapter=$serviceManager->get('Admin\AuthenticationAdapter');

        $authAdapter->setRequest($request);
        $authAdapter->setResponse($response);

        $result=$authAdapter->authenticate();

        if($result->isValid()){
            return true; // everything OK
        }

        $response->setContent('Access denied');
        $response->setStatusCode(\Zend\Http\Response::STATUS_CODE_401);

        $e->setResult($response); // short-circuit to application end

        return false;
    }

就这样 :)。这适用于模块的任何页面!

于 2013-07-17T15:48:08.843 回答