代码之家  ›  专栏  ›  技术社区  ›  Itay Moav -Malimovka

在Zend框架中,有没有一种方法可以从引导程序中重定向浏览器?

  •  2
  • Itay Moav -Malimovka  · 技术社区  · 15 年前

    我需要根据引导文件中的某些条件重定向。
    它是在前面的控制器和路由被定义之后完成的。
    我该怎么做?
    (我知道我可以简单地使用header(‘location:…’),重点是我需要使用路由器来构建URL。

    5 回复  |  直到 13 年前
        1
  •  3
  •   TDT    14 年前

    一年多以后,我在ZF中编程,我为您的问题找到了这个解决方案。 这是我在引导中确定用户登录位置的函数。

    class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
    

    {

    protected $_front;
    
    (...)
    
    protected function _initViewController() 
    {
        (...)
    
        $this->bootstrap('FrontController');
        $this->_front = $this->getResource('FrontController');
    
        (...)
    }
    
    protected function _initLogado()
    {
        $router = $this->_front->getRouter();
        $req = new Zend_Controller_Request_Http();
        $router->route($req);
        $module = $req->getModuleName();
    
        $auth = Zend_Auth::getInstance();
        if ($auth->hasIdentity()) {
            $this->_view->logado = (array) $auth->getIdentity();
        } else {
            $this->_view->logado = NULL;
            if ($module == 'admin') {
                $response = new Zend_Controller_Response_Http();
                $response->setRedirect('/');
                $this->_front->setResponse($response);
            }
        }
    }
    

    }

        2
  •  2
  •   balupton    14 年前

    重定向真的不应该在引导文件中…对于编码人员来说,这将是一个可怕的调试之夜,它最终会在几年内卡住您的代码。

    使用前控制器插件、操作控制器插件,或者在操作控制器中执行该操作。最终,应该完全避免这样的重定向…

        3
  •  0
  •   David Snabel-Caunt    15 年前

    最好的办法可能是 Controller Plugin

    可以添加一个routeShutdown()钩子,该钩子在路由发生后调用,但在调用控制器的操作方法之前调用。在这个插件中,您可以检查请求数据,或者在ACL中查找权限,或者只是随机重定向(如果您需要的话)!

    选择权属于你!

    编辑:重读您的问题,看起来您甚至不感兴趣的路由-使用routestartup()作为引导后插入代码的最早点。

        4
  •  0
  •   Rob Allen    15 年前

    我会从前面的控制器抓起路由器,然后调用它 assemble() 方法,然后使用 header() :)

    当做,

    Rob…

        5
  •  0
  •   TomáÅ¡ Fejfar    15 年前

    您可以在插件中检查“routeShutdown”方法的条件,然后使用$this->actionController->\u helper->redirector()重定向;)