【问题标题】:session based multistep form cakephp基于会话的多步表单 cakephp
【发布时间】:2016-05-05 09:55:50
【问题描述】:

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

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

我是 cakephp 的学习者,我对 session 的了解不够。 如果您是专家,请这样做。

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

【问题讨论】:

    标签: php session cakephp


    【解决方案1】:

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

    Example link

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

    【讨论】:

      猜你喜欢
      • 2011-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-18
      • 2012-06-06
      相关资源
      最近更新 更多