Перенаправление в плагин Front Controller Zend - PullRequest
10 голосов
/ 01 марта 2010

Я пытаюсь централизовать мои перенаправления (на основе аутентификации и других состояний) в плагин фронт-контроллера. Пока я пробовал:

    $this->setRequest(new Zend_Controller_Request_Http('my_url'));

в различных точках плагина (то есть от routeStartup до dispatchLoopShutdown), а также:

    $this->setResponse(new Zend_Controller_Response_Http('my_url'));

Может кто-нибудь предложить какую-то помощь в этом, или указать мне направление обучения?

Ответы [ 3 ]

29 голосов
/ 01 марта 2010

Самым простым способом было бы использовать ZF Redirect ActionHelper

    $r = Zend_Controller_Action_HelperBroker::getStaticHelper('redirector');
    $r->gotoUrl('/some/url')->redirectAndExit();

В качестве альтернативы можно создать его без HelperBroker

    $r = new Zend_Controller_Action_Helper_Redirector;
    $r->gotoUrl('/some/url')->redirectAndExit();

ActionHelper предоставляет API, предназначенный исключительно для перенаправления через ряд методов, таких как gotoRoute, gotoUrl, gotoSimple, которые вы можете использовать в зависимости от желаемого UseCase.

Внутренне, ActionHelper использует API Response и Router для выполнения перенаправления, так что вы также можете использовать их методы напрямую, например,

    $request->setModuleName('someModule')
            ->setControllerName('someController')
            ->setActionName('someAction');

или

    $response->setRedirect('/some/url', 200);

Дополнительная литература:

23 голосов
/ 01 марта 2010

Если вы ищете перенаправление, если пользователь не вошел в систему, первый параметр 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.
    }
}
3 голосов
/ 21 сентября 2011

Если вы хотите перенаправить на страницу индекса, этого должно быть достаточно.

public function preDispatch(Zend_Controller_Request_Abstract $request)
{
    if(!Zend_Auth::getInstance()->hasIdentity())
    {
          $baseUrl = new Zend_View_Helper_BaseUrl();
          $this->getResponse()->setRedirect($baseUrl->baseUrl());
    }
}

Если вы хотите перенаправить куда-то еще, просто измените параметр в функции setRedirect ()

Спасибо!:)

...