我得到了一个带有复选框列表的表格。最后一个说“其他”,单击后将启用输入文本。
我有此规则,用户最多可以检查三个选项。
您已经知道,复选框存储在数组中。
用户是否应在不键入输入的情况下选中“其他”选项,我想通过错误消息(验证)提示用户也需要输入输入文本。
这是options_list.blade.php
视图:
@section('content')
@if($errors->any())
<div class="alert alert-danger" role="alert">
<strong><i class="fas fa-exclamation-triangle"></i> Warning</strong>: The following errors have been found:
<ul>
@foreach($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<div class="card">
<div class="card-body">
<div class="shadow p-3 mb-5 bg-white rounded">{{--Referencias: https://getbootstrap.com/docs/4.1/utilities/shadows/--}}
<p class="h6">
Here goes the question text
</p>
<p class="text-primary">You can choose up to three options</p>
</div>
<div class="shadow">
<form action="{{ route('survey1.post',$token) }}" method="post" id="myForm">
<div class="col-lg">
@foreach($lineasdeinvestigacion as $lineadeinvestigacion)
<div class="custom-control custom-checkbox my-1 mr-sm-2">
<input type="checkbox" class="custom-control-input" id="customControlInline{{ $loop->index + 1 }}" name="lineasdeinvestigacion[]" value="{{ $lineadeinvestigacion->linea }}" {{ old('lineasdeinvestigacion') && in_array($lineadeinvestigacion->linea,old('lineasdeinvestigacion')) ? 'checked' : (isset($encuesta) && ($encuesta->fortalecer_linea_1 == $lineadeinvestigacion->linea || $encuesta->fortalecer_linea_2 == $lineadeinvestigacion->linea || $encuesta->fortalecer_linea_3 == $lineadeinvestigacion->linea)) ? 'checked' : '' }}>
<label class="custom-control-label" for="customControlInline{{ $loop->index + 1 }}">{{ $lineadeinvestigacion->linea }}</label>
</div>
@endforeach
<div class="custom-control custom-checkbox my-1 mr-sm-2">
<input type="checkbox" class="custom-control-input" id="customControlInlineOtro" name="lineasdeinvestigacion[]" value="other" {{ old('lineasdeinvestigacion') && in_array('other',old('lineasdeinvestigacion')) ? 'checked' : (isset($encuesta) && ($encuesta->fortalecer_linea_1 == 'other' || $encuesta->fortalecer_linea_2 == 'other' || $encuesta->fortalecer_linea_3 == 'other')) ? 'checked' : '' }}>
<label class="custom-control-label" for="customControlInlineOtro">Other</label>
<input placeholder="" type="text" class="form-control form-control-sm" id="fortalecer_otro" name="fortalecer_otro" maxlength="255" value="{{ old('fortalecer_otro') ? old('fortalecer_otro') : '' }}" disabled>
</div>
@include('path.to.partials.buttons._continue'){{-- includes @csrf --}}
</div>
</form>
</div>
</div>
</div>
@endsection
这是optionsController.php
:
public function store(Token $token, Request $request){
//dd($request->lineasdeinvestigacion);
//Validating input data
$this->validate($request,[
'lineasdeinvestigacion' => 'nullable|max:3',
'fortalecer_otro' => 'required_if:lineasdeinvestigacion.*,other|max:255',
],[
'lineasdeinvestigacion.max' => 'You cannot choose more than :max options.',
]);
}
这是从复选框列表(dd($request->lineasdeinvestigacion);
)中选择的值的数组:
array:4 [▼
0 => "Procesos socio-culturales"
1 => "Ciencia, Innovación tecnológica y Educación"
2 => "Nuevas formas de movilidad"
3 => "other"
]
但是,验证未按预期进行,因为当选中“其他” #fortalecer_otro
复选框选项时,它允许输入文本#customControlInlineOtro
为空。
解决方案
我认为一种解决方法是将数组的最后一项分开,因为要验证的输入是 last 项(复选框)是否具有other
值,并将其添加作为this answer中所述的另一个要验证的元素。
或者在this one中,它涉及验证最后一个。就我而言,我必须计算项目数,然后指出要验证的数字x,这将是最后一个项目...
该如何解决?有什么想法吗?
已解决
由于second link,我已经意识到我应该count the number of items in an array,然后在验证规则中指出,该项目检查值是否为other
,然后应用{{1} }:
required_if
然后就成功了。
答案 0 :(得分:0)
由于second link,我已经意识到我应该count the number of items in an array,然后在验证规则中指出,该项目检查值是否为other
,然后应用{{1} }:
required_if
然后就成功了。