php - 在 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:如何上传所有这些文件?
有人愿意帮助我吗?
解决方案
推荐阅读
- javascript - 如何使用命令提示符安装 npm
- c++ - 正则表达式设置字符串文字的最大长度
- python - 找不到带有标签的句柄放入图例 ERROR
- c++ - 如何使用 cub::DeviceReduce::ArgMin()
- google-cloud-platform - Google Cloud Storage UI 显示“遇到内部错误”,API 调用给出致命错误
- django - 使用 Nginx、Gunicorn 和 Supervisor 部署 Django
- python - 如何在当前窗口中打开one2many记录,而不是odoo V13中的弹出窗口
- email - Rundeck 电子邮件审批流程
- reactjs - 检查 cookie 是否存在于 React
- javascript - BrowserSync 不会在使用 Gulp 进行更改时重新加载