在symfony中登录页面后保留POST参数

时间:2009-10-09 13:39:40

标签: php post login symfony1

如何让symfony在登录页面后保留POST数据?

例如,当用户填写表单时,cookie已过期。提交表单后,用户将获得重定向到登录页面。并且在成功登录后,他获得重定向回到表单的“动作”URL,而没有来自初始表单的任何POST数据。

symfony中是否有处理该数据的机制,或者我必须自己编写?

不过,我正在使用sfGuardPlugin

6 个答案:

答案 0 :(得分:1)

我为此写了一个简单的过滤器。也许你可以扩展它的功能,你可以使用,这里是

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

我希望它有所帮助。

答案 1 :(得分:1)

我几乎肯定做一个$ this-> forward()实际上发送了你所有的帖子数据。

答案 2 :(得分:0)

我对symfony框架没有任何先验知识,但在重定向后你放弃了这些信息似乎很正常。 Post变量受限于唯一的HTTP请求。执行重定向通常意味着执行第二个HTTP请求。你无法存储POST变量。 您应该使用SESSION变量。

答案 3 :(得分:0)

您可以在symfony中为重定向提供额外的参数,如下所示:

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

当然,发送这样的密码并不是很聪明。

用户会话可能是一个选项,但在重定向到新操作之前尝试执行所有操作

答案 4 :(得分:0)

我认为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);
}

下次请求后,flash属性将自动清除。

答案 5 :(得分:-1)

您必须将其存储在$ _SESSION中。确保你已经调用了session_start(),然后你可以这样做:

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

或者,只需将其存储为会话中的子数组。

$_SESSION['previousPost'] = $_POST;

我对Sympony框架没有任何影响,但这将完成工作。