基于会话的多步骤表单cakehp


session based multistep form cakephp

基本上我有三种形式。我的表单中有一个动作,我想使用会话创建3个步骤的表单。我希望当我点击下一个按钮时,它会验证表单1,如果成功,则重定向到表单2。。与form3的wise类似,但将所有数据保留在会话中,在第三步中,运行操作并将所有数据添加到数据库中
我只需要在我的插入在我的操作addjob中运行之前检查会话中的条件。请帮我做这件事。

我的主要问题是如何在一个会话变量中获取所有的post数据,并在插入之前一步一步地进行检查。。

我是cakepp的学习者,对课程没有足够的了解。如果你是一个专家,那么请这样做。

 public function addjob($id = NULL) {   
    $this->layout = "layout_registration_old";        
    $this->loadcategory();
    $this->loadcargo(); 
   //$this->loadsubcategory(); 
    $this->getCountries(); 
    $this->getstates(); 
    if ($this->request->is('put') || $this->request->is('post')) {          
        if (isset($id)) {
            $this->Job->id = $id;
        } else {
            $this->request->data['Job']['status'] = 1;  
            $this->request->data['Job']['job_type'] = 1; //this is used to update the job type private or public.
            $this->Job->create();
        }
        $this->Job->set($this->request->data);
        if ($this->Job->AddEdit()) { // ADDEdit is the validation name in model              
            if ($this->Job->save($this->request->data['Job'], false)) {
                if (isset($id)) {
                $this->Session->setFlash(__('Job has been updated sucessfully.'));
                } else {
                $this->Session->setFlash(__('Job has been added succesfully.'));
                }
                $this->redirect(array('controller' => 'jobs', 'action' => 'index'));
            }
        } else {
            $errors = $this->Job->validationErrors;
            $this->Session->setFlash(__('Please check your entry.'), 'flash_error');
        }
    }
    if (isset($id)) {
        $this->request->data = $this->Job->find('first', array('conditions' => array('id' => base64_decode($id))));
    }
}   

表单-1

 <?php echo $this->Form->create('Job', array('url' => array('controller' => 'jobs', 'action' => 'addjob')));?>
     <?php echo $this->Form->input('customer_name',array('div' => false, 'label' => false));?>
      <?php echo $this->Form->input('customer_no',array('div' => false, 'label' => false));?>
       <?php echo $this->Form->input('customer_email',array('div' => false, 'label' => false));?>
       <?php
                  echo $this->Form->input('transport_type', array(
                      'type' => 'select',
                      'label' => false,
                     'class' => 'select',
                      'options' => array(
                          1 => 'Road'
                      ),                
                  ));
              ?>
 <?php echo $this->Form->submit('Save', array('class' => "navigation_button btn btn-primary btn-sm", 'div' => false)); ?>
        <?php echo $this->Form->end(); ?>

表单-2

 <?php echo $this->Form->create('Job', array('url' => array('controller' => 'jobs', 'action' => 'addjob')));?>
 <?php echo $this->Form->input('fname',array('div' => false, 'label' => false));?>
  <?php echo $this->Form->input('lname',array('div' => false, 'label' => false));?>
   <?php echo $this->Form->input('email',array('div' => false, 'label' => false));?>
   <?php echo $this->Form->submit('Save', array('class' => "navigation_button btn btn-primary btn-sm", 'div' => false)); ?>
    <?php echo $this->Form->end(); ?>

表单-3

    <?php echo $this->Form->create('Job', array('url' => array('controller' => 'jobs', 'action' => 'addjob')));?>
     <?php echo $this->Form->input('shop',array('div' => false, 'label' => false));?>
      <?php echo $this->Form->input('business',array('div' => false, 'label' => false));?>
       <?php echo $this->Form->input('status',array('div' => false, 'label' => false));?>  
 <?php echo $this->Form->submit('Save', array('class' => "navigation_button btn btn-primary btn-sm", 'div' => false)); ?>
        <?php echo $this->Form->end(); ?>

您不应该在会话中保存前两个表单的数据,而应该使用任何javascript解决方案来实现一个多部分表单(表单向导)。在进入下一步之前,使用javascript或通过ajax验证每个步骤的数据(如果需要动态完成),并在最后提交表单,这样您就不必玩会话了。

示例链接

PS-这可以作为对这个问题的评论,但我还没有获得足够的声誉来发表评论:(