Объяснение Zend Redirector Action Helper - PullRequest
1 голос
/ 05 августа 2011

Есть ли исчерпывающее объяснение того, как работает Zend Redirector Action Helper? Я прочитал справочное руководство, но мне все еще не ясно на 100%. Например:

  • Очевидно, что goToSimple () больше похож на forward (), чем на редирект. Означает ли это, что он не отправит сообщение о перенаправлении обратно в браузер?

  • Если я хочу отправить сообщение перенаправления обратно в браузер, какой метод перенаправления я должен использовать?

  • Есть ли способ получить поведение типа forward () без повторного выполнения метода init () помощников действий?

Эта проблема возникла, когда я реализовывал ACL. У меня есть ACL Action Helper, и его метод init () добавляет роль «текущий». Когда я использую goToSimple () перенаправителя, я получаю сообщение о том, что роль уже зарегистрирована. Я могу использовать if (!$acl->hasRole('current')), однако я думаю, что было бы предпочтительнее не выполнять повторный запуск init () помощника.

1 Ответ

1 голос
/ 05 августа 2011

Не слишком исчерпывающе, только несколько быстрых заметок о перенаправителе.

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

...