web-dev-qa-db-ja.com

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はまだ必要です。どうして?どうすれば修正できますか?

前に感謝します。

Require_if検証は、一度に1つの値のみを受け入れると思います。以下のように検証コードを変更してみてください。

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

編集:LePhlegの答えを確認して、よりクリーンです。答えが不可能なときは、質問を確認してください。彼は同じ方法を使用していましたが、うまくいきませんでした。

33
RDev

すべての値をコンマ区切りのパラメーターとして渡す必要があります。

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

これを試して

単一の一致値がそのように使用される場合

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

複数の値がある場合は、そのように使用します(コンマ区切り)

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

詳細については、ドキュメントを参照してください required_if

1
Jignesh Joisar

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);
}
0
Shyam Achuthan