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

时间:2015-05-05 17:05:37

标签: symfony symfony-forms

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

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

return $this->redirect($this->generateUrl('name_of_the_route', array('param1' => $param1Value, 'param2' => $param2Value, )));

这将生成包含所有参数(和值)的url。

但是AFAIK我没有可能传递像我需要的那样的数组(可能包含100封电子邮件)。

我正在考虑使用flash消息并创建一个包含所有电子邮件的超级字符串,以逗号分隔。它远非优雅(闪存消息的长度有限制吗?)。

还有其他解决方案吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

绕过"无法通过数组"问题是,您可以将电子邮件地址连接成一个字符串,该字符串由不在电子邮件地址中出现的内容分隔。也许管道人物|。

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

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