Объяснение 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(); однако, только для проверки, но не для пересылки.

Другие вопросы по тегам