在Front Controller插件中重定向Zend

sun*_*ung 10 plugins redirect zend-framework response request

我正在尝试将我的重定向(基于身份验证和其他各种状态)集中到前端控制器插件中.到目前为止,我已经尝试过:

    $this->setRequest(new Zend_Controller_Request_Http('my_url'));
Run Code Online (Sandbox Code Playgroud)

在插件的各个点(即从routeStartup到dispatchLoopShutdown)还有:

    $this->setResponse(new Zend_Controller_Response_Http('my_url'));
Run Code Online (Sandbox Code Playgroud)

任何人都可以提供一些帮助,或指向我的教程方向?

Gor*_*don 30

最简单的方法是使用ZF的Redirect ActionHelper

    $r = Zend_Controller_Action_HelperBroker::getStaticHelper('redirector');
    $r->gotoUrl('/some/url')->redirectAndExit();
Run Code Online (Sandbox Code Playgroud)

或者在没有HelperBroker的情况下实例化它

    $r = new Zend_Controller_Action_Helper_Redirector;
    $r->gotoUrl('/some/url')->redirectAndExit();
Run Code Online (Sandbox Code Playgroud)

该ActionHelper提供了一个API只关心通过多种方法重定向,像gotoRoute,gotoUrl,gotoSimple,您可以根据您的需要的用例使用.

在内部,ActionHelper使用Response和Router的API来进行重定向,因此您也可以直接使用他们的方法,例如

    $request->setModuleName('someModule')
            ->setControllerName('someController')
            ->setActionName('someAction');
Run Code Online (Sandbox Code Playgroud)

要么

    $response->setRedirect('/some/url', 200);
Run Code Online (Sandbox Code Playgroud)

进一步阅读:


sma*_*007 23

如果您要查找用户未记录的重定向,则dispatchLoopStartup()的第一个参数是请求对象的句柄.

public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request)
{
    if(!Zend_Auth::getInstance()->hasIdentity())
    {
        $request->setControllerName('auth');
        $request->setActionName('login');
        // Set the module if you need to as well.
    }
}
Run Code Online (Sandbox Code Playgroud)