Объяснение Zend Redirector Action Helper
Есть ли исчерпывающее объяснение того, как работает Zend Redirector Action Helper? Я прочитал справочное руководство, но мне все еще не ясно на 100%. Например:
Видимо goToSimple() больше похожа на forward(), чем на редирект. Означает ли это, что он не отправит сообщение о перенаправлении обратно в браузер?
Если я хочу отправить сообщение перенаправления обратно в браузер, какой метод перенаправления я должен использовать?
Есть ли способ получить поведение типа forward () без повторного выполнения метода init() помощников действий?
Эта проблема возникла, когда я реализовывал ACL. У меня есть ACL Action Helper и его метод init() добавляет роль "текущий". Когда я использую goToSimple() перенаправителя, я получаю сообщение о том, что роль уже зарегистрирована. я могу использовать if (!$acl->hasRole('current'))
однако я думаю, что было бы предпочтительнее не выполнять заново init() помощника.
1 ответ
Не слишком исчерпывающий, лишь несколько быстрых заметок о перенаправителе.
Перенаправитель делает немного больше, чем обычный редирект PHP, который вы бы использовали с header('Location: www.domain.com/new/location')
в вашем скрипте - после exit()
,
Если вы посмотрите на Zend_Controller_Action_Helper_Redirector, то в конечном итоге он сделает то же самое; если $_exit==true (по умолчанию), все приводит к redirectAndExit()
какие звонки header()
и заканчивается exit()
вызов. Однако это правильно завершает структуру, в основном сеанс, если таковой имеется.
Перенаправитель не выполняет внутреннюю пересылку, он отправляет код по умолчанию 302, если вы не установили другой код с помощью setCode()
,
методы gotoRoute()
а также gotoSimple()
собрать целевой URL для вас и позвонить redirectAndExit()
но только если $_exit==true
, Или вы можете использовать своих братьев gotoRouteAndExit()
а также gotoSimpleAndExit()
который выйдет немедленно. Методы gotoSimple передаются в setGotoSimple, который использует некоторые методы для сборки URL для вас.
В вашем случае я могу только предположить, что setGotoSimple
метод и один из методов в нем вызывают контроллер назначения и запускают метод init(); однако, только для проверки, но не для пересылки.