0

我需要为我的一个项目创建一个向导系统,这就是我现在处理它的方式。

/*
   Just pseudo functions
*/

function wizard_start()
{
    //Fill the table with default values, set isVisible column to 0
}

function wizard_step_1()
{
    //Update necessary columns (e.g Name, sirname)
}

function wizard_step_2()
{
    //Update necessary columns (e.g Date, Type)
}

...

function wizard_final()
{
    //Do the last touches and update isVisible to 1 so it will appear on website
}

我在会话中保持我们当前的步骤。喜欢;

isset($_session['step2_completed'])
    $this->wizard_step_3();

isset($_session['step3_completed'])
    $this->wizard_step_4();

...

响应通过XMLHttpRequest并期望 JSON 格式的数据。如果 JSON 返回 true,Javascript 将加载下一个向导。(通常用于不同任务的 HTML 表单。)

我想知道是否有更好和更好的实践向导替代品。例如,我不知道在会话中保持当前步骤是好还是坏的做法。

基本上,您将如何自己设计这样的任务,尽可能地使用最佳实践?

谢谢你。

4

1 回答 1

5

将当前步骤保留在会话变量中很好,具有以下良好实践点:

  1. 向导通常是一种逐步从用户那里获取信息的方法。在大多数情况下,用户可以在任何阶段选择退出或取消。在您的解决方案中,您将在每个步骤中更新数据库中的列。虽然我很欣赏您必须isVisible防止半满的记录导致问题,但通常您会将此信息临时存储在某个地方(例如变量),并且仅在用户点击“完成”时提交完整的记录。当然,如果丢失用户输入是一个问题,则例外。例如。在电子邮件站点中,我们不希望会话丢失意味着丢失电子邮件草稿。
  2. 除了以上几点,您实际上可能希望将进行中的值存储在会话变量中。这样,您的应用程序在最后阶段的“原子”提交之前不会受到影响。
  3. 存储会话的当前阶段时,使用顺序标志(即表示最后完成的步骤的整数,而不是step_x_completed)。这样你的状态变量就会更少,出错的机会也会更少。
  4. 安全是另一回事,在我们讨论安全注意事项之前,您需要提供有关您的应用程序所处环境的更多信息。
于 2013-05-08T16:54:18.510 回答