В чем разница между перенаправлением и форвардом в Symfony?
Я хочу знать разницу между:
$this->forward("module", "action");
и
$this->redirect("module/action");
Мое первое предположение состоит в том, что в качестве нового запроса подразумевается новый запрос, а другой - нет, но я не уверен.
Ответ 1
В некоторых случаях выполнение действия заканчивается запросом нового действия. Например, действие, обрабатывающее отправку формы в запросе POST, обычно перенаправляется на другое действие после обновления базы данных. Другим примером является псевдоним действия: действие индекса часто является способом отображения списка и фактически переходит к действию списка.
Класс action предоставляет два метода для выполнения другого действия:
Если действие переадресует вызов другому действию:
$this->forward('otherModule', 'index');
Если действие приводит к переадресации в Интернете:
Выбор между перенаправлением или переходом иногда бывает сложным. Чтобы выбрать лучшее решение, имейте в виду, что пересылка является внутренней для приложения и прозрачной для пользователя. Что касается пользователя, отображаемый URL-адрес совпадает с запрошенным. Напротив, перенаправление - это сообщение пользователю браузера, включающее в себя новый запрос и изменение конечного результирующего URL.
Если действие вызывается из представленной формы с помощью method="post", вы всегда должны делать перенаправление. Главное преимущество заключается в том, что если пользователь обновляет результирующую страницу, форма не будет отправляться повторно; кроме того, кнопка "Назад" работает так, как ожидалось, показывая форму, а не предупреждение, спрашивающее пользователя, хочет ли он повторно отправить запрос POST.