Я пытаюсь централизовать свои перенаправления (на основе аутентификации и различных других состояний) в плагин фронтального контроллера. До сих пор я попробовал:
$this->setRequest(new Zend_Controller_Request_Http('my_url'));
в различных точках в плагине (т.е. от routeStartup до dispatchLoopShutdown) и также:
$this->setResponse(new Zend_Controller_Response_Http('my_url'));
Кто-либо может предложить некоторую помощь на этом или указать на меня в направлении учебного руководства?
Если вы хотите перенаправить, если пользователь не зарегистрирован, первый параметр 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.
}
}
Самый простой способ - использовать 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);
Дополнительная литература: