laravel 中的多个文件上传验证
Multiple file upload validation in laravel
我有多个输入字段,每个字段都有多个文件上传。
<?php for ($i = 0; $i < $total; $i++)
{
?>
<div class="col-md-3 addedClass">
<label>Vehicle Images</label>
<input type="file" name="vehicle_image[{{$i}}][]" multiple="multiple">
@if($errors->has('vehicle_image'))
<span class="help-block">
<strong>{{$errors->first('vehicle_image')}}</strong>
</span>
@endif
</div>
<?php } ?>
我在请求中有这样的文件:
"vehicle_image" => array:2 [▼
0 => array:2 [▼
0 => "citizenship.jpg"
1 => "logo_vehicle.png"
]
1 => array:2 [▼
0 => "ae backend.jpg"
1 => "logo_vehicle.png"
]
]
在这种情况下,我有两个包含 2/2 个文件的输入字段。当我尝试像这样验证 only images
的 MIME 类型时:
$this->validate($request,[
'vehicle_image' => 'mimes:jpeg,png,bmp,tiff |max:4096'
],$messages[
// error messages
]);
我遇到以下错误:
FatalThrowableError in ReservationController.php line 67: Cannot use [] for reading
有人能告诉我上面的代码有什么问题吗?
欢迎提出建议。
尝试删除空白的 $messages 数组并为请求的输入调用函数 all()
。
$rules = [
'vehicle_image' => 'mimes:jpeg,png,bmp,tiff |max:4096'
];
$this->validate($request,$rules);
要显示默认错误消息,您可以使用以下内容抛出异常:
if ($validator->fails()) {
$this->throwValidationException(
$request, $validator
);
return redirect('VIEWPATH.VIEWNAME')->withErrors($validator)->withInput();
}
然后要显示错误,您可以在 blade 视图或模板中使用如下内容:
@if (count($errors) > 0)
<div class="alert alert-danger alert-dismissable fade in">
<a href="#" class="close" data-dismiss="alert" aria-label="close">×</a>
<h4>
<i class="icon fa fa-warning fa-fw" aria-hidden="true"></i>
<strong>Error!</strong> See error messages...
</h4>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
或
@if(session()->has('errors'))
<div class="alert alert-danger fade in">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
<h4>Following errors occurred:</h4>
<ul>
@foreach($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
只需从输入字段中删除多余的空数组索引。
<input type="file" name="vehicle_image[{{$i}}]" multiple="multiple">
$this->validate($request, [
'vehicle_image' => 'image|mimes:jpeg,png,jpg,gif,svg|max:4096'
]);
和dd($errors)
查看结果
我有多个输入字段,每个字段都有多个文件上传。
<?php for ($i = 0; $i < $total; $i++)
{
?>
<div class="col-md-3 addedClass">
<label>Vehicle Images</label>
<input type="file" name="vehicle_image[{{$i}}][]" multiple="multiple">
@if($errors->has('vehicle_image'))
<span class="help-block">
<strong>{{$errors->first('vehicle_image')}}</strong>
</span>
@endif
</div>
<?php } ?>
我在请求中有这样的文件:
"vehicle_image" => array:2 [▼
0 => array:2 [▼
0 => "citizenship.jpg"
1 => "logo_vehicle.png"
]
1 => array:2 [▼
0 => "ae backend.jpg"
1 => "logo_vehicle.png"
]
]
在这种情况下,我有两个包含 2/2 个文件的输入字段。当我尝试像这样验证 only images
的 MIME 类型时:
$this->validate($request,[
'vehicle_image' => 'mimes:jpeg,png,bmp,tiff |max:4096'
],$messages[
// error messages
]);
我遇到以下错误:
FatalThrowableError in ReservationController.php line 67: Cannot use [] for reading
有人能告诉我上面的代码有什么问题吗? 欢迎提出建议。
尝试删除空白的 $messages 数组并为请求的输入调用函数 all()
。
$rules = [
'vehicle_image' => 'mimes:jpeg,png,bmp,tiff |max:4096'
];
$this->validate($request,$rules);
要显示默认错误消息,您可以使用以下内容抛出异常:
if ($validator->fails()) {
$this->throwValidationException(
$request, $validator
);
return redirect('VIEWPATH.VIEWNAME')->withErrors($validator)->withInput();
}
然后要显示错误,您可以在 blade 视图或模板中使用如下内容:
@if (count($errors) > 0)
<div class="alert alert-danger alert-dismissable fade in">
<a href="#" class="close" data-dismiss="alert" aria-label="close">×</a>
<h4>
<i class="icon fa fa-warning fa-fw" aria-hidden="true"></i>
<strong>Error!</strong> See error messages...
</h4>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
或
@if(session()->has('errors'))
<div class="alert alert-danger fade in">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
<h4>Following errors occurred:</h4>
<ul>
@foreach($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
只需从输入字段中删除多余的空数组索引。
<input type="file" name="vehicle_image[{{$i}}]" multiple="multiple">
$this->validate($request, [
'vehicle_image' => 'image|mimes:jpeg,png,jpg,gif,svg|max:4096'
]);
和dd($errors)
查看结果