Все, что сказал Берт, правильно. Кроме того, причина, по которой вы хотите сделать цепочку (если у вас есть модель) или перенаправление (если у вас нет модели для сохранения), заключается в том, что оба эти метода возвращают 302-ответный запрос перенаправления в браузер. , Затем браузер знает, что нужно запросить следующую страницу.
В этом случае в заголовке полученной страницы будет указан правильный URL-адрес, а не URL-адрес страницы, с которой исходный запрос был получен.
Этот шаблон очень полезен после POST-информации, так как позволяет избежать всевозможных проблем с закладками и повторной отправкой информации, если пользователь нажимает обновление на полученной странице.
Пример: если вы сохраняете книгу и хотите отобразить страницу списка, если книга успешно сохранена. Если вы просто вызовете «controller.list ()» в своем методе, он покажет пользователю список отображаемых книг, но в строке URL все равно будет «... / book / save». Это не хорошо для закладок или перезагрузки. Вместо этого, вызов redirect / chain отправит браузеру ответ 302, который попросит его запросить страницу «... / book / list», что он и делает. Все ваши переменные (ваша модель и другие флеш-сообщения) находятся в области видимости флеш-памяти, поэтому они все еще доступны для использования вашей моделью / представлением, и в мире все устраивает.
Этот шаблон называется Post / Redirect / Get .