このようなドロップダウンメニューがあります
<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の答えを確認して、よりクリーンです。答えが不可能なときは、質問を確認してください。彼は同じ方法を使用していましたが、うまくいきませんでした。
すべての値をコンマ区切りのパラメーターとして渡す必要があります。
$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);
}