В чем разница между redirect и forward в Symfony
В некоторых случаях выполнение 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-данные и не отправил форму ещё раз.