基于会话的多步骤形式cakephp

时间:2016-05-05 09:55:51

标签: php session cakephp

基本上我有3种形式。 我的表单中有一个操作,我希望使用session创建3个步骤。 我想当我点击下一个按钮时它会验证form1,如果成功则重定向到form2 .. 对于form3来说是明智的,但是将所有数据保存在会话中,并且在第三步中,操作将运行并将所有数据添加到数据库中 我只需要在我的动作addjob中运行插入之前检查会话中的条件。 Plz帮助我做到这一点。

我的主要问题是如何在一个会话变量中获取所有帖子数据,并在插入之前逐步检查..

我在cakephp学习,我对会话不够了解。 如果你是专家那么就这样做。

 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(); ?>

1 个答案:

答案 0 :(得分:0)

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

Example link

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