我正在尝试在 Play 2.0.3 中实现一些流控制,这是一个包含几个步骤的向导。在 Play 中最好的方法是什么?
我想要多步骤流程,例如step1 -> step2 -> finish
主要问题是不允许用户跳过例如 step2 并直接完成(用户可以在浏览器中手动输入链接/finish)。
谢谢。如果我没有很好地解释自己,请告诉我。
我正在尝试在 Play 2.0.3 中实现一些流控制,这是一个包含几个步骤的向导。在 Play 中最好的方法是什么?
我想要多步骤流程,例如step1 -> step2 -> finish
主要问题是不允许用户跳过例如 step2 并直接完成(用户可以在浏览器中手动输入链接/finish)。
谢谢。如果我没有很好地解释自己,请告诉我。
你至少有两个选择:
一种完全无状态的方式可能包括将所有数据存储在步骤的 URL 中,其中步骤n + 1
包含来自步骤的所有数据n
:
GET /step1 controllers.Application.step1
GET /step2 controllers.Application.step2(dataFromStep1)
GET /step3 controllers.Application.step3(dataFromStep1, dataFromStep2)
POST /finish controllers.Application.finish
该解决方案的优势在于其简单性以及 Play! 免费执行下一步之前检查所有必需步骤是否已完成的事实!路由器。
但是,如果您有大量数据,您的 URL 将非常庞大,从而使该解决方案不太适用。在这种情况下,您需要:
/step2
URL 不会为不同的用户返回相同的内容;我会将这些步骤存储在数据库中(长期)或缓存中(短期)。这样,您可以构建一些逻辑if (secondQuestionAnswered) { .. }
并确保您的用户没有跳过任何内容和/或用户可以在他想要的时候完成这些步骤。如果您的应用程序增长并且您需要对其进行扩展,那么持久保存在数据库或缓存中也会受益。