Required_if laravel с несколькими значениями

У меня есть выпадающее меню, как это

<select name="selection">
   <option value="1">Option 1</option>
   <option value="2">Option 2</option>
   <option value="3">Option 3</option>
</select>
<input type="text" name="stext">

я хочу в Ларавелле

public static myfunction(){
   $input = \Input::only('selection','stext');
   $rule = array(
      'selection' => 'required',
      'stext' => 'required_if:selection,2,3',
   );
   $validate = \Validator::make($input,$rule);
}

но если я выберу вариант 1, Stext все еще требуется. Зачем? как я могу это исправить?

спасибо раньше.

5 ответов

Решение

Я думаю, что проверка require_if принимает только одно значение за раз. Попробуйте изменить код проверки, как показано ниже:

$rule = array(
  'selection' => 'required',
  'stext' => 'required_if:selection,2|required_if:selection,3',
);

РЕДАКТИРОВАТЬ: Проверьте ответ LePhleg, более чище. Во время ответа, который был невозможен, просто проверьте вопрос, он использовал тот же метод, но не работал.

Вам просто нужно передать все значения как параметры, разделенные запятой:

$rules = array(
      'selection' => 'required',
      'stext'     => 'required_if:selection,2,3'
);

Попробуй это

если одно значение совпадения, то используется так

'stext'     => 'required_if:selection,2'

если у вас есть несколько значений, то используется как это (разделенные запятой)

'stext'     => 'required_if:selection,2,3'

для получения дополнительной информации см. документацию required_if

Вы можете продолжить с иногда проверкой для Laravel. Вы можете определить собственное закрытие как в примере ниже

public static myfunction(){
   $input = \Input::only('selection','stext');
   $rule = array(
      'selection' => 'required'
   );
$validator->sometimes('stext', 'required', function($input){
    return (($input->selection == 1) || ($input->selection == 2));
});
   $validate = \Validator::make($input,$rule);
}

Вы всегда можете использовать класс Rule для переопределения поведения по умолчанию. Это должно работать в случае нескольких значений:

      use Illuminate\Validation\Rule;
..................    
'stext' => Rule::requiredIf(function ()  {
                return in_array(request()->selection,[2,3]);
            }),
Другие вопросы по тегам