сохранение параметров POST после страницы входа в symfony

как я могу заставить symfony сохранить данные POST после страницы входа?

например, cookie истек, пока пользователь заполнял форму. после отправки формы пользователь получает перенаправление на страницу входа. и после успешного входа в систему он получает перенаправление обратно к URL-адресу «действия» формы без каких-либо данных POST из начальной формы.

есть ли какой-либо механизм в symfony для обработки этих данных, или я должен написать свой собственный?

Кстати, я использую sfGuardPlugin

Я написал для этого простой фильтр. Возможно, вы можете расширить свои возможности, и вы можете использовать, здесь

class postFilter extends sfFilter { public function execute($filterChain) { // Execute this filter only once if ($this->isFirstCall()) { // reach user object $user = $this->getContext()->getUser(); // request $request = $this->getContext()->getRequest(); // if user unauthenticated and if user posted a form if(!$user->isAuthenticated() AND $request->isMethod('post')) { // now you can save the post parameters $user->setAttribute('param_name', $request->getParameter('post_data')); // or something like that } } // Execute next filter $filterChain->execute(); } } 

И добавьте фильтр в filters.yml

 post_filter: class: postFilter 

Я надеюсь, что это помогает.

Я почти уверен, что выполнение $ this-> forward () фактически отправляет все ваши данные.

У меня нет никаких предварительных знаний о структуре symfony, но мне кажется нормальным, что после перенаправления вы теряете эту информацию. Почтовые переменные ограничены уникальным HTTP-запросом. Выполнение перенаправления означает, как правило, выполнение второго HTTP-запроса. Вы не можете хранить переменные POST. Вместо этого вы должны использовать переменные SESSION.

Вы можете указать дополнительные параметры для перенаправления в symfony следующим образом:

 $this->redirect('module/action?var='.$request->getParameter('id')); $this->redirect('module/action?var=2'); 

Конечно, не так уж удобно отправлять пароли, как это.

Пользовательский сеанс может быть вариантом, но попытаться сделать все, прежде чем перенаправлять на новое действие

Я думаю, что атрибут Flash был бы хорошим компромиссом для этого. В отличие от сеанса, который будет работать, значения сохраняются только на следующей странице.

http://www.symfony-project.org/book/1_2/06-Inside-the-Controller-Layer#Flash%20Attributes

 foreach($_POST as $key => $value){ $this->getUser()->setFlash($key, $value); } 

Атрибуты вспышки автоматически очищаются после следующего запроса.

Вам нужно будет сохранить его в $ _SESSION. убедитесь, что вы вызвали session_start (), тогда вы можете сделать что-то вроде этого:

 foreach($_POST as $key => $value){ $_SESSION[$key] = $value; } 

или просто сохраните его как вспомогательный массив в сеансе.

 $_SESSION['previousPost'] = $_POST; 

У меня нет опыта с концепцией Sympony, но это выполнит работу.