Php Symfony 2:跨重定向保留表单数据
在symfony2应用程序中,我试图实现一个带有搜索框和一些附加过滤器(choice小部件)的表单。搜索框在数据库中查找记录,然后显示有关该记录的详细信息。过滤器用于显示或隐藏某些类型的详细信息 如果找不到任何记录或一条记录,则此操作有效,因为我可以停留在同一控制器和操作中。但是,如果找到多条记录,我将呈现另一个显示选择对话框的模板。列表中的每条记录都是指向原始页面的链接,但以记录id作为参数Php Symfony 2:跨重定向保留表单数据,php,forms,symfony,Php,Forms,Symfony,在symfony2应用程序中,我试图实现一个带有搜索框和一些附加过滤器(choice小部件)的表单。搜索框在数据库中查找记录,然后显示有关该记录的详细信息。过滤器用于显示或隐藏某些类型的详细信息 如果找不到任何记录或一条记录,则此操作有效,因为我可以停留在同一控制器和操作中。但是,如果找到多条记录,我将呈现另一个显示选择对话框的模板。列表中的每条记录都是指向原始页面的链接,但以记录id作为参数 当我点击这个链接时,我丢失了表单数据。在此处通过重定向保留表单数据的最佳方式是什么(或有条件地显示选择
当我点击这个链接时,我丢失了表单数据。在此处通过重定向保留表单数据的最佳方式是什么(或有条件地显示选择对话框而不重定向)?您可以单击链接提交表单!您可以在jquery中创建它
$('a.mylink').live('click', function(){
$('#yourform').submit();
return false;
});
您可以通过Id作为隐藏输入。有两种方法。一个简单且易于实现,第二个允许机器人抓取您的搜索结果,但需要更多的时间和外部存储 使用会话对象 Symfony的
会话
对象有一个所谓的存储随机数据的地方。基本上,它是相同的会话参数,但清楚地表明它可以随时删除
更新的指出flashbag只能检索一次。因此,我建议您改用Session
对象。它作为session
服务存储在容器中,或者作为app.session
存储在twig中。会话将在您第一次在其中写入内容时自动启动
如何实施:
/search?hash=ASIDJA12SLDS5KSK2
这是什么?它是如何工作的?非常简单:您将每个唯一的搜索参数集存储在db中,并为这组参数存储唯一的哈希。哈希函数不要求是可逆的,但它应该是常量:每组搜索参数应该只有一个常量哈希。否则,您将有两个不同的页面,具有相同的结果,爬行机器人可以将其识别为重复内容
逻辑如下:
/search?散列=*散列*
/search?hash=*hash*
。如果您正确执行步骤2和步骤3,您甚至不需要处理此情况
您可以选择使用可逆哈希算法(例如base64)。在这种情况下,您不需要外部存储,但请确保不会出现过大的url我使用jquery 1.10,并且.live()从1.7开始就被弃用,并在1.9中被删除。但是,即使成功了,我也无法做到这一点,因为点击提交表单只会让我回到选择页面。+1:你提到了这一点,但值得明确指出的是,flash消息只保留了一个请求,然后就被删除了。因此,如果用户出于某种原因点击
F5
或cmd+r
以重新加载结果页,现有闪存数据将被清除,并且该值将不再可用。谢谢。最新答案