Laravel 5.8 和数据表表单验证

问题描述 投票:0回答:2

我正在使用 Laravel 5.8 和 Yajra 数据表包。

我必须从控制器构建一个动态表单(效果很好)。

提交表单后,当验证失败时,我想在表单中显示旧值。

显示表单/数据表和验证工作正常。我需要显示旧值的方法。

控制器(构建表单)(只是摘录,因为它工作正常)

    if (request()->ajax())
    {
        return datatables()
                ->of($memberships)
                ->addIndexColumn()
                ->addColumn('amount', function($data) use ($membership, $amounts) {
                        $link = '<input type="text" id="membership_id[]" name="membership_id[]" value="' . $data->id . '" style="width:100px" class="form-control">';
                        $link .= '<input type="number" id="amount[]" name="amount[]" value="">';
                        return $link;
                    })
                ->rawColumns(['amount'])
                ->make(true);
    }

    return view('my_blade', compact('memberships', 'id'));

我的问题是验证失败时如何设置金额输入字段中的value属性?

my_blade(显示数据表形式)(只是摘录,因为它工作正常)

  @if (count($errors) > 0)
          <div class="alert alert-danger">
              <ul>
                  @foreach ($errors->all() as $error)
                      <li>{{ $error }}</li>
                  @endforeach
              </ul>
          </div>
      @endif

      <form method="POST" id="my_form" action="{{ route('my_submit_route') }}">
      @csrf

      <input type="text" id="id" name="id" value="{{ $id }}">

      <table id="my_datatable" class="table table-hover table-striped table-responsive">
        <thead class="crud-header">
            <tr>
              <th>No</th>
              <th>Name</th>
              <th>Description</th>
              <th>Status</th>
              <th>Amount</th>
            </tr>
        </thead>
        <tbody>

        </tbody>
      </table>

      <div class="form-group row">
          <div class="col text-center">
              <button type="submit" class="btn btn-primary">
                  Save
              </button>
          </div>
      </div>

    </form>

    </div>
</div>

@endsection

@section('script')
    <script>

    $(document).ready(function() {

        /* Start Datatable  */
        $.ajaxSetup({
              headers: {
                  'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
              }
          });

        $.noConflict();

        $('#my_datatable').DataTable({
            iDisplayLength: 100,

            serverSide: true,
            processing: true,

          ajax: {
            url: "{{ route('my_route', ['id' => $id]) }}",
            type: 'GET',
           },
          columnDefs: [
            {className: "dt-center", targets: "_all"}
          ],
          columns: [
            {data: 'DT_RowIndex', name: 'DT_RowIndex', orderable: false},
            {data: 'name', name: 'name'},
            {data: 'given_name', name: 'given_name'},
            {data: 'amount', name: 'amount'}
          ],
          order: [[1, 'desc']]
        });
        /* End Datatable  */

        });
      </script>
@endsection

我的验证工作正常。只是不知道验证失败时如何显示旧值

我的控制器(处理表单提交)

    /* get the array of membership IDs */
    $membershipIDs = $request->membership_id;

    $validate_array = [];

    /* Loop through membership for validation */
    for($i = 0; $i < count($membershipIDs); $i++)
    {
        $validate_array['amount.'. $i] = 'sometimes|nullable|numeric|gte:0';
    }
    $validator =  Validator::make($request->all(), $validate_array);

    if ($validator->fails())
    {
      /* Get the array of amounts */
      $amounts = $request->amount;
      // How to manage here to return in the form and display the old values and the error message on the failed fields?      
    }
    else
    {
      //Process the form;
    }

我的问题:如何在控制器中管理以在表单中返回并在失败的字段上显示旧值和错误消息?

我还使用以下内容进行验证,验证效果很好,但验证失败后无法在表单中显示旧值。

$this->validate($request, $validate_array); 

谢谢

laravel datatable laravel-validation yajra-datatable
2个回答
0
投票

在你的控制器中尝试一下:

if ($validator->fails()) {
    return back()->withInput()->withErrors($validator);
}

不确定这是否也适用于 Laravel 5。但替代方案是:

if ($validator->fails()) {
    return redirect('post/create')
        ->withErrors($validator)
        ->withInput();
}

适用于 Laravel 5


0
投票

请问这里有什么提示吗? 回到这里,仍在寻找如何去做。 提供的答案都没有解决它。

© www.soinside.com 2019 - 2024. All rights reserved.