【问题标题】:Processing multi-step form in Laravel在 Laravel 中处理多步表单
【发布时间】:2019-02-22 10:17:57
【问题描述】:

我对 laravel 很陌生,我必须在数据库中插入许多表单字段,所以我将字段分为多个部分,我想要实现的是在用户单击下一步按钮和步骤更改以及用户单击时存储每个部分的数据上一个按钮并进行一些更改,数据库应该更新,如果用户离开表单不完整,那么当他下次登录时,表单填写应该从他离开的步骤填写,直到现在我已经成功实现了更改步骤和第一步将数据插入数据库,对于其他步骤,我更新了数据库,但如果用户进入第一步并再次更改表单字段,我将遇到问题如何再次更新第一步数据我正在使用 ajax 发送数据和步骤编号

我的控制者

    function saveJobPostFirstStage(Request $request)
    {
    $currentEmployer = Auth::guard('employer')->user();
   //$data['currentEmployer'] = $currentEmployer;
     $employer_id = $currentEmployer->id;
      $random = $this->generateRandomString();
       $jobOne = new Job();
       //Session::pull('insertedId');

  if ($request->ajax()) {

        try {

            $stepPost = $request->all();

                $step = $stepPost['stepNo'];
                $insertedId = $stepPost['insertedId'];
                switch ($step) {
                    case '1':
                        if ($insertedId == 0) {

                        $jobOne->employer_id = $employer_id;
                        $jobOne->job_title = $stepPost['jobTitle'];

                        $jobOne->company_id = (int)$stepPost['companyName'];
                        $jobOne->country_id = (int)$stepPost['country'];
                        $jobOne->state_id = (int)$stepPost['state'];
                        $jobOne->city_id = (int)$stepPost['city'];
                        $jobOne->street_address = $stepPost['street'];
                        $jobOne->job_code = $random;


                        $stepOne = $jobOne->save();
                          if ($stepOne) {

                               Session::put('insertedId',$jobOne->id);
                           //session(['insertedId'=>$jobOne->id]);
                                $success = ['success' => "Success",
                                                'insertedId' => $jobOne->id];
                                //return json_encode($success);  

                              } 

                        }
                        else
                        {
                        $jobOne->employer_id = $employer_id;
                        $jobOne->job_title = $stepPost['jobTitle'];

                        $jobOne->company_id = (int)$stepPost['companyName'];
                        $jobOne->country_id = (int)$stepPost['country'];
                        $jobOne->state_id = (int)$stepPost['state'];
                        $jobOne->city_id = (int)$stepPost['city'];
                        $jobOne->street_address = $stepPost['street'];
                        $jobOne->job_code = $random;

                        $stepOne = $jobOne->whereId($insertedId)->update(['employer_id'=>$jobOne->employer_id,'job_title'=>$jobOne->job_title,'company_id'=> $jobOne->company_id,'state_id'=>$jobOne->state_id,'country_id'=>$jobOne->country_id,'city_id'=>$jobOne->city_id,'street_address'=>$jobOne->street_address,'job_code'=>$jobOne->job_code = $random]);
                        if ($stepOne) {

                                $success = ['success' => "Changes Made Successfully"];
                                return json_encode($success);        
                              } 
                        }
                        break;

                        case '2':


                            $jobOne->employment_type_id = (int)($stepPost['employmentType']);
                            $jobOne->job_type_id = (int)($stepPost['jobType']);
                            $jobOne->job_level_id = (int)($stepPost['jobLevel']);
                            $jobOne->industry_type_id = (int)($stepPost['industryType']);
                            $jobOne->job_category_id = (int)($stepPost['jobCategory']);
                            //$jobOne->salary = $stepPost['jobSalaryRange'];
                            $jobOne->salary_period_id = (int)$stepPost['salaryPeriod'];
                            //$jobOne->vacancy_end_date = $stepOne['applicationDeadline'];
                            $stepOne = $jobOne->whereId($insertedId)->update(['employment_type_id'=> $jobOne->employment_type_id,'job_type_id'=>$jobOne->job_type_id,'job_level_id'=> $jobOne->job_level_id,'industry_type_id'=>$jobOne->industry_type_id,'job_category_id'=>$jobOne->job_category_id,'salary_period_id'=>$jobOne->salary_period_id]);
                        if ($stepOne) {

                                $success = ['success' => "Changes Made Successfully"];
                                return json_encode($success);        
                              } 



                        break;

                        case '3':
                        $jobOne->job_description = $stepPost['jobDescription'];
                        $jobOne->job_specification = $stepPost['jobSpecifications'];
                        $jobOne->job_responsibilities = $stepPost['jobResponsibilities']; 

                        $stepOne = $jobOne->whereId($insertedId)->update(['job_description'=>$jobOne->job_description,'job_specification'=>$jobOne->job_specification,'job_responsibilities'=>$jobOne->job_responsibilities]);

                        if ($stepOne) {
                             $success = ['success' => "Changes Made Successfully"];
                                return json_encode($success);  
                        }

                    default:
                        # code...
                        break;
                }


            return json_encode($stepPost);







        //$this->alertMessage = 'Your Phone has been added Successfully.';
        //$this->alertType = 'success';
    } catch (QueryException $e) {
        return $e->getMessage();
    }

   /* return redirect()->route('employer-account-page')
        ->with([
            'alertMessage' => $this->alertMessage,
            'alertType' => $this->alertType
        ]);*/

      // $stepPost = Input::all();



  }
        /*$stepOne = $request->all();
        $country_Id = (int)$stepOne['country'];
        return json_encode((getType($country_Id)));*/



}

【问题讨论】:

    标签: php ajax database laravel forms


    【解决方案1】:

    首先,你的代码很乱。

    每个表单应该有一个表,每个表单都有它的父 ID。 重构代码的下一步是为每个表单创建一个控制器(你不需要它,但你想要这个)

    每个表单(一个模型)都应该有一个基于其他表单重新计算自身值的方法,这样如果你改变了第一个表单,那么你可以调用重新计算第二个表单的方法,然后调用第二个表单的方法重新计算第三种形式等的形式。

    这个界面可能会有所帮助

    interface IForm {
        public function getPreviousForm() : ?IForm; // These notations are since PHP7.1
        public function recalculate() : void;
        public function getNextForm() : ?IForm;
    }
    

    一个简单的代码在实践中应该如何工作

    $formX->save();
    $formX->getNextForm()->recalculate(); // This will call formX->recalculate(); formX+1->getNextForm()->recalculate()
                                        // which will call formX+1->recalculate(); formX+2->getNextForm()->recalculate()
                                        // etc...
                                        // while getNextForm() != null
    

    如果您需要在链的中间插入另一个表单,您可能还需要这个。

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-27
      • 1970-01-01
      • 2018-09-28
      • 2014-05-08
      • 1970-01-01
      • 1970-01-01
      • 2018-01-07
      • 2017-11-20
      相关资源
      最近更新 更多