Обработка многошаговой формы в Laravel - PullRequest
0 голосов
/ 18 сентября 2018

Я довольно новичок в laravel. Мне нужно вставить много полей формы в базу данных, поэтому я разделил поля на несколько разделов, и я хочу сохранить данные каждого раздела, когда пользователь нажимает кнопку «Далее» и изменения шага, а также когда пользователь нажимает кнопку.предыдущая кнопка и вносит некоторые изменения, база данных должна быть обновлена, и если пользователь оставляет форму незаполненной, то при следующем входе в систему заполнение формы должно заполняться с оставленного им шага, до сих пор я успешно достигал изменения шагов и на первом шаге 1вставил данные в базу данных и для другого шага я обновил базу данных, но у меня возникли проблемы, если пользователь переходит к первому шагу и снова меняет поля форм, как обновить данные первого шага. Я использую 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)));*/



}

1 Ответ

0 голосов
/ 18 сентября 2018

Во-первых, ваш код грязный.

Вы должны иметь одну таблицу на форму, где у каждой формы есть родительский идентификатор. Следующим шагом по рефакторингу кода будет создание одного контроллера для каждой формы (вам это не нужно, но вам нужно)

Каждая форма (модель) должна иметь метод, который пересчитывает свои значения на основе других форм, так что если вы измените первую форму, вы можете вызвать метод, который пересчитывает вторую форму, а затем вызвать метод второй форма, которая пересчитывает третью форму и т. д.

Этот интерфейс может быть полезен

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

Вам также может понадобиться это, если вам нужно будет вставить другую форму в середине цепочки.

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...