我实现了一个时事通讯功能。
用户可以从他的客户中选择一个列表,他想向其发送时事通讯,客户列表可能有几千个条目。
在用户完成创建列表后,我将创建一个数据库,其中包含我需要的列表中的所有信息。现在,我想让这个过程尽可能对用户友好。
我想了一下:
- 用户完成列表并单击"保存"
- 我获取信息并返回类似"操作正在运行。请稍候,此操作可能需要几分钟"的视图
- 我正在将列表中的信息写入数据库
- 我将用户从"请稍候"视图重定向到另一个视图,在那里他可以再次工作
我的问题是,我不知道如何在symfony2中实现这一点,事件是否有可能,或者我应该在会话中保存列表?
您有几个选项。最常见的两种是:
- 使用javascript的AJAX调用
- 使用队列(如ZeroMQ或RabbitMQ)
我更喜欢排队,因为它更易于管理。在Symfony2中,有几个包可用于实现队列系统:
- RabbitMQ捆绑包:https://packagist.org/packages/oldsound/rabbitmq-bundle
- ZeroMQ库:https://github.com/reactphp/zmq
您可以在上搜索备选方案https://packagist.org
我将实现以下流程:
- 渲染窗体
- 张贴表单
- 处理表单:将信息保存到数据库
- 句柄形式:对应队列发送
- 用闪光灯通知用户
在后端:
- 启动使用者(CLI)
- 从队列中获取信息
- 发送您的时事通讯
- 使用新状态和日志更新数据库
在前端:如果数据库已更新并且状态已更改,则通知用户