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

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

Я хочу знать разницу между:

$this->forward("module", "action");

и

$this->redirect("module/action");

Мое первое предположение состоит в том, что в качестве нового запроса подразумевается новый запрос, а другой - нет, но я не уверен.

4b9b3361

Ответ 1

В некоторых случаях выполнение действия заканчивается запросом нового действия. Например, действие, обрабатывающее отправку формы в запросе POST, обычно перенаправляется на другое действие после обновления базы данных. Другим примером является псевдоним действия: действие индекса часто является способом отображения списка и фактически переходит к действию списка.

Класс action предоставляет два метода для выполнения другого действия:

Если действие переадресует вызов другому действию:

$this->forward('otherModule', 'index');

Если действие приводит к переадресации в Интернете:

$this->redirect('otherModule/index');
$this->redirect('http://www.google.com/');

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

Если действие вызывается из представленной формы с помощью method="post", вы всегда должны делать перенаправление. Главное преимущество заключается в том, что если пользователь обновляет результирующую страницу, форма не будет отправляться повторно; кроме того, кнопка "Назад" работает так, как ожидалось, показывая форму, а не предупреждение, спрашивающее пользователя, хочет ли он повторно отправить запрос POST.