Intereting Posts

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

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

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

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

_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); 

в то время как _redirect() делает

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

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

Смотрите:

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

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

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

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

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

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

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

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