当当前输入等于数组内的值时,Laravel验证required_if(带有输入文本的复选框)

时间:2018-09-27 23:27:54

标签: php laravel validation checkbox

我得到了一个带有复选框列表的表格。最后一个说“其他”,单击后将启用输入文本。

我有此规则,用户最多可以检查三个选项。

您已经知道,复选框存储在数组中。

用户是否应在不键入输入的情况下选中“其他”选项,我想通过错误消息(验证)提示用户也需要输入输入文本。

这是options_list.blade.php视图:

@section('content')
    @if($errors->any())
        <div class="alert alert-danger" role="alert">
            <strong><i class="fas fa-exclamation-triangle"></i>&nbsp;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

然后就成功了。

1 个答案:

答案 0 :(得分:0)

由于second link,我已经意识到我应该count the number of items in an array,然后在验证规则中指出,该项目检查值是否为other,然后应用{{1} }:

required_if

然后就成功了。