【问题标题】:Don't store anything in the databases until all the steps are completed在完成所有步骤之前,不要在数据库中存储任何内容
【发布时间】:2019-09-02 13:49:01
【问题描述】:

我想制作一个包含多个表单和提交的向导 UI。我在每次提交时都会调用 API。如果其中一个表单失败或用户在中间退出,我希望它将所有内容恢复到数据库中,但我也会存储他们的进度。这样的事情可能吗?

我正在考虑创建一个 metadata 表,用于在每次 API 调用后存储表单的 JSON 数据

metadata表结构

| apicall             | data          | method  | email       |
| ------------------- |:-------------:|:-------:| -----------:|
| /api/organization/1 | {json: data}  | POST    | abc@abc.com |
| /api/role/1         | {json: data}  | POST    | abc@abc.com |

完成所有步骤后,运行该表并调用所有这些 api 以将数据存储在适当的表中。

有没有更好的方法呢?我也在考虑只添加一个列inprogress 标志。但是无论inprogress 列如何,都有很多遗留代码在使用这些表。

【问题讨论】:

  • 向表中添加一个活动标志。当他们批准更改时,您将所有更改都激活。
  • 我做不到。许多遗留代码也在使用这些表。
  • 使用会话、本地存储或任何其他方法在会话期间将原始数据存储在安全的地方。你为什么还要要求用户在多个页面上填写表单?只需将所有内容放在一种形式中并以清晰的方式呈现,这样就不会损害用户体验。
  • 你在使用 react/vue 来存储状态吗?
  • 您可以使用浏览器存储或 cookie 来保存该数据,直到用户必须填写的最后一页,然后在最后一页一次性发送。

标签: php mysql laravel api


【解决方案1】:

您有两个主要选择:

  • 使用本地 javascript 存储并将最后一步的所有内容作为请求发送。

  • 使用 $_SESSION 变量存储数据并在最后一步进行处理。确保您的脚本以 session_start(); 开头否则您将无法访问您的 $_SESSION。

最后一个选项会更容易实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-04
    • 2012-10-10
    • 2015-09-24
    • 2021-10-28
    • 1970-01-01
    • 2016-07-16
    • 1970-01-01
    相关资源
    最近更新 更多