你会如何使用PHP制作一个向导系统?

时间:2013-05-08 16:46:11

标签: php laravel wizard

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

/*
   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表单。)

我想知道是否有更好,更好的练习向导替代方案。例如,我不知道保持当前步骤是一种好的还是坏的做法。

基本上,你会如何自己设计这样的任务,尽量使用最佳实践?

谢谢。

1 个答案:

答案 0 :(得分:4)

保持会话变量中的当前步骤没有问题,具有以下良好实践要点:

  1. 向导通常是一种以逐步方式从用户获取信息的方法。在大多数情况下,使用可以在任何阶段选择退出或取消。在您的解决方案中,您将在每个步骤更新数据库中的列。虽然我感谢您isVisible阻止半填充记录导致问题,但通常您会将此信息临时存储(例如变量),并且只有在用户点击“完成”时才提交完整记录。当然,例外情况是用户输入的丢失是一个问题。例如。在电子邮件网站中,我们不希望丢失会话意味着丢失草稿电子邮件。
  2. 除上述观点外,您实际上可能希望将正在进行的值存储在会话变量中。这样,在最后阶段进行“原子”提交之前,您的应用程序不会受到影响。
  3. 当存储会话的当前阶段时,使用顺序标志(即表示最后完成的步骤而不是step_x_completed的整数)。这样,您可以减少状态变量,减少出错的机会。
  4. 安全性是另一回事,在我们讨论安全注意事项之前,您需要提供有关应用程序所处环境的更多信息。