表单验证后,在Symfony重定向中将长数组元素作为参数传递

表单验证后,在Symfony重定向中将长数组元素作为参数传递,symfony,symfony-forms,Symfony,Symfony Forms,我有一个表单,用户可以上传包含电子邮件的CSV文件。这些电子邮件得到处理和发送,对于通过验证的电子邮件,我创建了一个“$successfulEmails”数组 在我的第一个实现中,我将它传递给一个呈现它的小树枝,它是正常的(我可以在我的小树枝中显示“这些是发送的电子邮件”,并显示下面的列表)。唯一的问题是,在登录页中,我可以点击刷新按钮,重新提交表单。因此,正如Symfony文档中所建议的,最好在表单->isValid()的末尾有一个重定向。重定向的问题是它通过Symfony的路由系统:我可以传

我有一个表单,用户可以上传包含电子邮件的CSV文件。这些电子邮件得到处理和发送,对于通过验证的电子邮件,我创建了一个“$successfulEmails”数组

在我的第一个实现中,我将它传递给一个呈现它的小树枝,它是正常的(我可以在我的小树枝中显示“这些是发送的电子邮件”,并显示下面的列表)。唯一的问题是,在登录页中,我可以点击刷新按钮,重新提交表单。因此,正如Symfony文档中所建议的,最好在表单->isValid()的末尾有一个重定向。重定向的问题是它通过Symfony的路由系统:我可以传递一些变量,比如

return $this->redirect($this->generateUrl('name_of_the_route', array('param1' => $param1Value, 'param2' => $param2Value, )));
这将生成包含所有参数(和值)的url

但是,好吧,我不可能传递我需要的数组(可能包含100封电子邮件)

我在考虑使用一条flash消息,创建一个包含所有电子邮件的巨型字符串,逗号分隔。它一点也不优雅(而且闪光信息的长度有限制吗?)

还有其他解决办法吗

谢谢大家!

要解决“无法传递数组”的问题,您可以将电子邮件地址连接到一个字符串中,该字符串由电子邮件地址中不存在的内容分隔。也许是一个管道角色|

更大的问题是,将100封电子邮件连接在一起可能太多,无法轻松地放入查询字符串中。您可能应该将它们保存在服务器上的某个位置。我想到两个主意

  • 在会话中保存阵列。这是一种快速而简单的方法,可能可以正常工作,尽管会话并不是真正用于处理大量数据
  • 保存在数据库中。我能想到的最简单的方法是使用一个id和一个大文本或blob列的表。序列化电子邮件地址数组,将其保存在文本列中并重定向。您可以直接使用条令实体而不是数据库。对于如何将id传递给重定向操作,您有多种选择。将其作为单个查询参数传递会起作用,但如果您这样做,并且它是一个简单的整数id,那么用户将能够更改该数字,并查看其他用户的列表。您可以通过在另一列中添加随机字符串或数字并将其作为另一个查询参数传递来修复此问题。重定向操作中的查询然后使用这两种方法检索列表

谢谢。另一种解决方案是在DB中实现一个表,该表包含提交表单的唯一字符串,当表单得到处理时,我将删除该记录。如果您尝试重新提交,它会告诉您“表单已提交”。这样,我在应用程序的其他领域也解决了这个问题,在这里我需要传递对象而不是简单的数组。考虑将数组存储在会话中只用于传递数据,然后可以删除。