因此,如果满足某些条件,我将隐藏所有字段。现在我的验证出现问题了。这是我所拥有的:
blade.php
<div class="{{ $room['show_checkin_out'] ? '' : 'hide-fields' }}">
<div class="form-group check-in-dtls">
<label for="before_checkin">@lang('before_checkin')</label>
<input type="text" class="form-control" id="before_checkin" name="before_checkin" placeholder="@lang('before_checkin')" value="{{ old('before_checkin', '') }}">
@if ($errors->has('before_checkin'))
<div class="form-group">
<p class="text-danger">{{ $errors->first('before_checkin') }}</p>
</div>
@endif
</div>
</div>
验证文件
'before_checkin' => ['sometimes', 'required', 'max:255'],
css
.hide-fields{
display: none;
}
我希望仅在显示了该字段并且我的验证无法正常工作时才需要这些字段。为此,最好的方法是什么?
答案 0 :(得分:1)
我可以建议3种方法。
$room['show_checkin_out']
虚假,则根本不添加此验证规则。种类:
$rules = [...];
if ($room['show_checkin_out']) {
$rules['before_checkin'] = ['sometimes', 'required', 'max:255'];
}
show_checkin_out
作为隐藏参数传递,并仅在存在before_checkin
时使show_checkin_out
成为必需。添加到您的表单中:
@if($room['show_checkin_out'])
<input type="hidden" name="show_checkin_out" value="1"/>
@endif
以这种方式修改验证规则:
'before_checkin' => ['required_with:show_checkin_out', 'sometimes', 'max:255'],
sometimes
规则,因此当before_checkin
虚假时,基本上不会输出show_checkin_out
字段:@if($room['show_checkin_out'])
<div class="form-group check-in-dtls">
<label for="before_checkin">@lang('before_checkin')</label>
<input type="text" class="form-control" id="before_checkin" name="before_checkin" placeholder="@lang('before_checkin')" value="{{ old('before_checkin', '') }}">
@if ($errors->has('before_checkin'))
<div class="form-group">
<p class="text-danger">{{ $errors->first('before_checkin') }}</p>
</div>
@endif
</div>
@endif
答案 1 :(得分:0)
您可以执行此操作,而不是设置display:none
属性。
@if(isset($room['show_checkin_out']))
<div class="">
<div class="form-group check-in-dtls">
<label for="before_checkin">@lang('before_checkin')</label>
<input type="text" class="form-control" id="before_checkin" name="before_checkin" placeholder="@lang('before_checkin')" value="{{ old('before_checkin', '') }}">
@if ($errors->has('before_checkin'))
<div class="form-group">
<p class="text-danger">{{ $errors->first('before_checkin') }}</p>
</div>
@endif
</div>
</div>
@endif
如果设置为$room['show_checkin_out']
,它将创建该部分并进行验证,否则将不会创建该部分,并且您的验证将按您希望的那样进行。
答案 2 :(得分:0)
所以最后,我完成了验证工作。
刀片
.... name="{{ $room['show_checkin_out']==1 ? 'before_checkin' : '' }}"
验证
$ret = [
// other validation
];
if (\Request::has('before_checkin')) {
$ret['before_checkin'] = ['required', 'sometimes', 'max:255'];
}
要简单得多。