【发布时间】:2018-09-11 05:23:41
【问题描述】:
我需要文件字段,该字段作为路径记录在数据库中。如果数据库中的字段为空,我想将其设为可选。在我的控制器的 update 操作中,我设置了以下验证:
$this->validate(request(),[
'drawings' => 'requiredIfEmpty:'.$product->drawings.'|file|max:'. config('fox.photoMaxSize').'|mimes:pdf',
然后在app/Providers/AppServiceProvider.php我定义了requiredIfEmpty验证器:
Validator::extend('requiredIfEmpty',function ($attribute,$value,$parameters,$validator){
if(is_null($parameters[0]) || empty($parameters[0])){
if (is_null($value)){
return false;
}
}
return true;
});
Validator::replacer('requiredIfEmpty', function ($message, $attribute, $rule, $parameters) {
return __('The :attr is required',['attr' => $attribute]);
});
在_form 视图中,我在drawings 字段中使用laravelcollective 表单助手,如下所示:
<div class="form-group {{$errors->first('drawings','has-error')}}">
@if (!is_null($product->drawings))
<a href="{{$product->drawings}}" target="_bfox"><img src="/imgs/pdf.png" alt="{{__('PDF File')}}" title="{{__('PDF File')}}" /></a>
<br>
@else
<img src="/imgs/empty.png" width="64" height="64" alt="{{__('Empty')}}..." title="{{__('Empty')}}..." /> <br>
@endif
{!! Form::label('drawings', __('Drawings')) !!}
{!! Form::file('drawings',['class' => 'btn btn-info','title' =>__('PDF file')]); !!}
@php ($eleE = $errors->first('drawings'))
@include('layouts.form-ele-error')
</div>
问题是,我的自定义验证规则没有被调用,因为该字段不是必需的并且它具有空值。我需要任何允许这两种情况的方法:
- 当
drawings文件字段为空且$product->drawings不为空时,不进行验证 - 当
drawings文件字段为空且$product->drawings为空时,将进行验证。
换句话说,我需要一个像requiredIf 这样的内置验证规则,但它不采用另一个表单字段作为参数,它只是采用另一个值,即使是表单字段值也始终有效为空且该字段不是必需的。
【问题讨论】:
标签: laravelcollective php laravel laravel-5