Подтвердить что ты не робот

В чем разница между перенаправлением и переходом в рамках Zend

В чем разница между перенаправлением и переходом в рамках Zend?

Когда мы должны использовать перенаправление и когда мы должны использовать forward?

4b9b3361

Ответ 1

_forward() просто перенаправляет все на другое действие контроллера, а _redirect() отправляет заголовок, что означает, что вы создаете новый HTTP-запрос и просматриваете весь процесс отправки с ним.

Например, если вы вызываете http://example.com/foo/bar, вы вызываете контроллер foo и bar. Если вы перейдете внутрь действия bar к действию baz, например. в том же запросе браузер будет по-прежнему находиться на одном URL-адресе, а при выполнении перенаправления ZF поручает браузеру загружать http://example.com/foo/baz.

По существу, _forward() делает

$request->setActionName($action)
        ->setDispatched(false);

while _redirect() делает

$this->_helper->redirector->gotoUrl($url, $options);

Обычно я перенаправляю, когда хочу предотвратить перезагрузку страницы, что приводит к переформатированию данных формы.

См. следующие:

Ответ 2

Представьте, что вы получаете телефонный звонок в офисе. Кто-то хочет поговорить с продажами. Если вы скажете "пожалуйста, звоните 123456" и повесьте трубку, это будет перенаправлено. Если вы говорите "подождать минуту" и просто передадите им вызов, это будет вперед.;)

Ответ 3

Вы использовали бы _forward() для случаев, когда URL-адрес останется прежним - хотя будьте осторожны, это означает, что любой класс базового контроллера, который вы используете, вызывается дважды.

Это может показаться очевидным или тривиальным, но если его не учитывать, действительно может испортить ваш дизайн приложения, учитывая, что интуитивное понимание потока состоит в том, что один запрос вызывает один экземпляр контроллера. Например. это означает, что сингллеты запроса-объема должны быть объявлены как static, или _forward() будет их разбивать.

Ответ 4

Я бы предположил, что перенаправление отправляет 301/302 обратно в браузер с новым URL-адресом, а переадресация просто "переадресовывает" запрос на другое действие контроллера внутри, но сохраняет URL-адрес таким же, чтобы браузер не знаете разные.

Ответ 5

1-redirect создайте новый ответ с информацией header() [302 Найдено или 301 == Перемещено навсегда], и он снова попадет в цикл отправки

2-forward изменить поток выполнения на этот новый запрос без повторного ввода процесса отправки

Ответ 6

Действие перенаправления завершает текущий процесс страницы и перенаправляет на другой. Весь контекст изменится (новый контроллер/действие), когда браузер получит перенаправление. Он подключается к новому URL

В то время как форвард останется на той же странице, но оставит контекст без изменений. Вы можете видеть это как вызов функции. Ваши представления будут загружены, как обычно.