В чем разница между redirect и forward в Symfony

Symfony framework

Автор: Александр Степанов

5 февр. 2013 г., 10:21:07  3268


В некоторых случаях выполнение action заканчивается вызовом другого action. Например, action выполняющий обработку POST запроса, обычно редиректит(redirect) в другой action после сохранения данных в базу. Другой пример - подмена action, обычно используется в index actions, когда надо вывести список элементов, здесь происходит перенаправление в list action (forward). Базовый класс sfActions поддерживает два метода, чтобы перенаправить приложение в другое русло: Если action перенаправляет вызов в другой action:

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

Если нужно сделать простой web-redirect:

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

Выбор между forward и redirect иногда вызывает затруднения. Чтобы принять правильное решение, помните, что forward происходит внутри symfony и прозрачно для юзера (грубо говоря, url в браузере не меняется, просто подменяется контент сгенерированный action-ом на который был forward). Редирект же напротив посылает сообщение браузеру (заголовок header: Location bla-bla), часто на другой url. Когда приходит POST запрос, нужно всегда использовать redirect, чтобы юзер при обновлении страницы (или нажав кнопку назад) не увидел всплывшее окошко про post-данные и не отправил форму ещё раз.