Laravel - Как применить вспомогательную функцию Laravel old () к динамической c форме ввода - PullRequest
0 голосов
/ 17 апреля 2020

В проекте Laravel -5.8 я работаю над динамической c формой ввода.

Основная модель - AppraisalGoal, а вторая модель - AppraisalGoalDetail

Контроллер

public function create()
{
     $goal = new AppraisalGoal();
     $goaldetail    =   new    AppraisalGoalDetail();

    return view('appraisal.appraisal_goals.create')
            ->with('goal', $goal)  
    ->with('goaldetail', $goaldetail) ;
}

public function store(StoreAppraisalGoalRequest $request)
{
    DB::beginTransaction(); 
    try {
        $goal = new AppraisalGoal();
        $goal->weighted_score           = $request->weighted_score;
        $goal->goal_title               = $request->goal_title;
        $goal->goal_description         = $request->goal_description;

             if ($request->appraisal_doc != "") {
                 $appraisal_doc = $request->file('appraisal_doc');
                 $new_name = rand() . '.' . $appraisal_doc->getClientOriginalExtension();
                 $appraisal_doc->move(public_path('storage/documents/appraisal_goal'), $new_name);
                 $goal->appraisal_doc = $new_name;
            }  
         $goal->save(); 

        foreach ( $request->activity as $key => $activity){
            $startDate = Carbon::parse($request->start_date[$key]);
            $endDate = Carbon::parse($request->end_date[$key]);

$insert_array = [
            'kpi_description'            => $request->kpi_description[$key],
            'activity'                   => $request->activity[$key], 
            'start_date'                 => $startDate ->toDateTimeString(),
            'end_date'                   => $endDate->toDateTimeString(),                
        ];

AppraisalGoalDetail::create($insert_array );
         }
    DB::commit(); 

            Session::flash('success', 'Goal is created successfully');
            return redirect()->route(goals.index');
    } catch (Exception $exception) {

DB::rollback();
            Session::flash('error', 'Action failed! Please try again');
            return redirect()->route('goals.index');
    }
}

представление create.blade показано ниже

   <form  action="{{route('goals.store')}}" method="post" class="form-horizontal" enctype="multipart/form-data">
       {{csrf_field()}}
       <div class="card-body">
        <div class="form-body">
        <div class="row">

          <div class="col-12 col-sm-6">
            <div class="form-group">
              <label class="control-label"> Goal Title:<span style="color:red;">*</span></label>                 
              <input  type="text" name="goal_title" value="{{ old('goal_title', $goal->goal_title) }}" placeholder="Enter goal title here" class="form-control">
            </div>
          </div>      

          <div class="col-sm-12">
            <div class="form-group">
                <label>Goal Description</label>
                <textarea rows="2" name="goal_description" class="form-control" value="{{old('goal_description',$goal->goal_description)}}" placeholder="Enter Goal Description here ...">{{old('goal_description',$goal->goal_description)}}</textarea>
            </div>
          </div>

   <div class="col-sm-12">
            <table class="table table-bordered">
                        <thead>
                        <tr>
                            <th scope="col">Activity<span style="color:red;">*</span></th>
                            <th scope="col">KPI<span style="color:red;">*</span></th>
                            <th scope="col">Start Date<span style="color:red;">*</span></th>
                            <th scope="col">End Date<span style="color:red;">*</span></th>
                            <th scope="col"><a class="btn btn-info addRow"><i class="fa fa-plus"></i></a></th>
                        </tr>
                        </thead>
                        <tbody>
                        <tr>
                            <td><input type="text" name="activity[]" class="form-control activity" ></td>
                            <td><input type="text" name="kpi_description[]" class="form-control kpi_description" ></td>
                            <td><input type="date" class="form-control start_date" placeholder="dd/mm/yyyy" name="start_date[]"  min="{{Carbon\Carbon::now()->firstOfYear()->format('Y-m-d')}}" max="{{Carbon\Carbon::now()->lastOfYear()->format('Y-m-d')}}"></td>
                            <td><input type="date" class="form-control end_date" placeholder="dd/mm/yyyy" name="end_date[]"  min="{{Carbon\Carbon::now()->firstOfYear()->format('Y-m-d')}}" max="{{Carbon\Carbon::now()->lastOfYear()->format('Y-m-d')}}"></td>
                            <td><a class="btn btn-danger remove"> <i class="fa fa-times"></i></a></td>
                         </tr>
                        </tbody>

                    </table>
        </div>
          <div class="col-12 col-sm-6">
            <div class="form-group">
              <label class="control-label"> Weight(%):<span style="color:red;">*</span></label>
              <input  type="number" name="weighted_score" placeholder="Enter weighted score here" class="form-control" max="120">
            </div>
          </div>  

          <div class="col-12 col-sm-6">
            <div class="form-group">
                <label class="control-label"> Attachment:</label>
                    <div class="custom-file">
                        <input value="{{old('appraisal_doc',$goal->appraisal_doc)}}" type="file" name="appraisal_doc" class="custom-file-input" id="customFile">
                        <label class="custom-file-label" for="exampleInputFile">Choose file</label>
                    </div>
            </div>
          </div>

       </div>
     </div>
    </div>          
    <!-- /.card-body -->
    <div class="card-footer">
      <button type="submit" class="btn btn-primary">{{ trans('global.save') }}</button>
    </div>           

    </form>

AppraisalGoal является внешним ключом для AppraisalGoalDetail. AppraisalGoalDetail представляет собой массив.

Способ работы приложения заключается в том, что, когда пользователь нажимает кнопку отправки, приложение сохраняет его в AppraisalGoal, выбирает его идентификатор и сохраняет его вместе с другими данными в AppraisalGoalDetail.

Однако проверка дает проблему. Всякий раз, когда пользователь отправляет и страница проверяется, все отображается пустым при отображении страницы ошибки, что означает, что мне нужно вводить их заново.

Мне удалось разрешить те из них, которые принадлежат модели AppraisalGoal, используя справочная функция old (), и она работает:

          <div class="col-12 col-sm-6">
            <div class="form-group">
              <label class="control-label"> Goal Title:<span style="color:red;">*</span></label>                 
              <input  type="text" name="goal_title" value="{{ old('goal_title', $goal->goal_title) }}" placeholder="Enter goal title here" class="form-control">
            </div>
          </div>      

          <div class="col-sm-12">
            <div class="form-group">
                <label>Goal Description</label>
                <textarea rows="2" name="goal_description" class="form-control" value="{{old('goal_description',$goal->goal_description)}}" placeholder="Enter Goal Description here ...">{{old('goal_description',$goal->goal_description)}}</textarea>
            </div>
          </div>

Я не знаю, как разрешить те из них, которые принадлежат AppraisalGoalDetail:

                        <tr>
                            <td><input type="text" name="activity[]" class="form-control activity" ></td>
                            <td><input type="text" name="kpi_description[]" class="form-control kpi_description" ></td>
                            <td><input type="date" class="form-control start_date" placeholder="dd/mm/yyyy" name="start_date[]"  min="{{Carbon\Carbon::now()->firstOfYear()->format('Y-m-d')}}" max="{{Carbon\Carbon::now()->lastOfYear()->format('Y-m-d')}}"></td>
                            <td><input type="date" class="form-control end_date" placeholder="dd/mm/yyyy" name="end_date[]"  min="{{Carbon\Carbon::now()->firstOfYear()->format('Y-m-d')}}" max="{{Carbon\Carbon::now()->lastOfYear()->format('Y-m-d')}}"></td>
                            <td><a class="btn btn-danger remove"> <i class="fa fa-times"></i></a></td>
                         </tr>

Как мне исправить это, чтобы страница все еще должна сохранять данные после отправки и ошибки проверки?

Спасибо

1 Ответ

1 голос
/ 17 апреля 2020

Когда вы получаете сообщение об ошибке проверки и что-то не так на сервере ... Вы перенаправляете страницу и выполняете функцию withInput () следующим образом.

return redirect()->route('goals.index')->withInput(['goal_title' => $request->goal_title, 'goal_description' => $request->goal_description]);

Она будет сортировать и показывать ваше значение, которое вы дадите для обновления

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