Перенаправление на Пехлеви плагина Фронтального контроллера

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

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

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

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

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

10
задан sunwukung 1 March 2010 в 17:33
поделиться

2 ответа

Если вы хотите перенаправить, если пользователь не зарегистрирован, первый параметр 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.
    }
}
23
ответ дан 3 December 2019 в 13:19
поделиться

Самый простой способ - использовать 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);

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

30
ответ дан 3 December 2019 в 13:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: