如何让symfony在登录页面后保留POST数据?
例如,当用户填写表单时,cookie已过期。提交表单后,用户将获得重定向到登录页面。并且在成功登录后,他获得重定向回到表单的“动作”URL,而没有来自初始表单的任何POST数据。symfony中是否有处理该数据的机制,或者我必须自己编写?
不过,我正在使用sfGuardPlugin答案 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框架没有任何影响,但这将完成工作。