首页 > 解决方案 > 在 laravel 请求中上传文件并验证多维数组数据类型

问题描述

在刀片文件中,我使用具有数组类型的名称,例如

<div class="form-group col-md-6">
    <label for="nama1">Nama</label>
    <input type="text" id="nama1" name="nadzir[nama][]" class="form-control {{ $errors->has('nadzir.nama.1') ? 'is-invalid' : '' }}" 
           placeholder="Nama" value="{{ old('nadzir.nama.1') }}">
    @if($errors->has('nadzir.nama.1'))
        <span id="nama1-error" class="invalid-feedback">
            <strong>{{ $errors->first('nadzir.nama.1') }}</strong>
        </span>
    @endif
</div>

带文件类型

<div class="form-group row">
    <label for="ktp1" class="col-sm-2 col-form-label">KTP Nadzir</label>
    <div class="col-sm-10">

        <div class="input-group">
            <div class="custom-file">
                <input type="file" id="ktp1" name="nadzir[ktp][]" class="custom-file-input {{ $errors->has('nadzir.ktp.1') ? 'is-invalid' : '' }}">
                <label class="custom-file-label" for="ktp1">Pilih File</label></label>
            </div>
        </div>
                        
        @if($errors->has('nadzir.ktp.1'))
            <span id="ktp1-error" class="invalid-feedback">
                <strong>{{ $errors->first('nadzir.ktp.1') }}</strong>
            </span>
        @endif
    </div>
</div>

带选择

<select name="nadzir[id_desa][]" class="form-control {{ $errors->has('nadzir.id_desa.2') ? 'is-invalid' : '' }}" >
    <option selected="true" disabled>Pilih Desa</option>
    @foreach ($desa as $item)
        <option value="{{ $item->id }}" {{ (old('nadzir.id_desa.2') ?? '') == $item->id ? 'selected':'' }}>{{ $item->nama }}</option>
    @endforeach
</select>
@if($errors->has('nadzir.id_desa.2'))
    <div class="invalid-feedback">
        <strong>{{ $errors->first('nadzir.id_desa.2') }}</strong>
    </div>
@endif

和其他代码,如果我把它们放在这里会有更多并生成如下请求

在此处输入图像描述

问题1:在数组类型验证中,为什么不能用html标签和type="file"进行验证(它不会捕获错误),而不是数组形式,而类型不是type="file"可以捕获错误验证,如下面的验证代码

在此处输入图像描述

验证码:

public function validator(Request $request)
    {
        return $this->validate($request, [
            'sertifikat_tanah'       => ['required', 'max:1024', 'mimes:pdf,png,jpg,jpeg,gif'],
            'surat_ukur'             => ['required', 'max:1024', 'mimes:pdf,png,jpg,jpeg,gif'],
            'sktts'                  => ['required', 'max:1024', 'mimes:pdf,png,jpg,jpeg,gif'],
            'sppt'                   => ['required', 'max:1024', 'mimes:pdf,png,jpg,jpeg,gif'],

            'nadzir.nama.*'                   => ['required', 'string', 'max:40', 'min:3'],
            'nadzir.nik.*'                    => ['required', 'numeric', 'digits:16'],
            'nadzir.tempat_lahir.*'           => ['required', 'string', 'max:35', 'min:3'],
            'nadzir.tanggal_lahir.*'          => ['required', 'date'],
            'nadzir.id_agama.*'               => ['required', 'numeric', 'digits:1'],
            'nadzir.id_pendidikan_terakhir.*' => ['required', 'numeric', 'digits_between:1,2'],
            'nadzir.pekerjaan.*'              => ['required', 'string', 'max:50', 'min:3'],
            'nadzir.kewarganegaraan.*'        => ['required', 'string', 'max:50', 'min:3'],
            'nadzir.rt.*'                     => ['required', 'numeric', 'digits:3'],
            'nadzir.rw.*'                     => ['required', 'numeric', 'digits:3'],
            'nadzir.id_desa.*'                => ['required', 'numeric', 'digits:10'],
            'nadzir.ktp.*'                    => ['required', 'max:1024', 'mimes:png,jpg,jpeg,gif'],
        ]);
    }

使用代码应该有相同的错误,即必须填写该字段

问题1:如何显示表单中的所有错误?

问题2:我不知道如何在数组中上传文件,而当我使用 $request->nadzir->file('ktp') 时它不起作用,希望我想检查文件是否存在上传所有文件。

public function store(Request $request)
{
    dd($request->nadzir['ktp'][0]); //display the file object, but don't know how to check if the file exists or not
    dd($request->file($request->nadzir['ktp'])); //not working

    $this->validator($request);

    $newarr = [];

    foreach($request->nadzir['ktp'] as $item){ //not working
        $newarr[] = $item;
    }

    dd($newarr); //not working
}

问题2:如何上传所有这些文件?

有人愿意帮助我吗?

标签: phparrayslaravelvalidationmultidimensional-array

解决方案


推荐阅读