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

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

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

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

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


person kipelovets    schedule 09.10.2009    source источник


Ответы (6)


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

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();
  }
}

И добавьте свой фильтр в filter.yml

post_filter:
  class: postFilter

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

person metoikos    schedule 09.10.2009

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

person sjobe    schedule 19.10.2009

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

person Roberto Aloi    schedule 09.10.2009
comment
да, это нормально, и я пытаюсь найти обходной путь для этого - person kipelovets; 11.10.2009

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

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

Конечно, отправлять такие пароли не очень умно.

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

person Kennethvr    schedule 09.10.2009

Я думаю, что атрибут 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);
}

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

person Jestep    schedule 11.10.2009

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

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

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

$_SESSION['previousPost'] = $_POST;

У меня нет опыта работы с фреймворком Sympony, но это поможет.

person GSto    schedule 09.10.2009
comment
это правильно, но я ищу решение в стиле symfony - person kipelovets; 11.10.2009