сохранение параметров POST после страницы входа в Symfony - PullRequest
1 голос
/ 09 октября 2009

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

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

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

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

Ответы [ 6 ]

1 голос
/ 19 октября 2009

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

1 голос
/ 09 октября 2009

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

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

Надеюсь, это поможет.

0 голосов
/ 11 октября 2009

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

http://www.symfony -project.org / книга / 1_2 / 06-внутри-Controller-Layer # Флэш% 20Attributes

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

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

0 голосов
/ 09 октября 2009

Вы можете задать дополнительные параметры для перенаправления в Symfony, например:

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

Конечно, отправлять пароли вроде этого не очень разумно.

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

0 голосов
/ 09 октября 2009

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

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

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

$_SESSION['previousPost'] = $_POST;

У меня нет опыта работы с платформой Sympony, но это сделает работу.

0 голосов
/ 09 октября 2009

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

...