j'ai un menu déroulant comme celui-ci
<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">
je veux en laravel
public static myfunction(){
$input = \Input::only('selection','stext');
$rule = array(
'selection' => 'required',
'stext' => 'required_if:selection,2,3',
);
$validate = \Validator::make($input,$rule);
}
mais si je sélectionne l'option 1, le texte est toujours requis. pourquoi? comment je peux le réparer?
merci avant.
Je pense que la validation require_if n'accepte qu'une valeur par fois ... Essayez de changer votre code de validation comme ci-dessous:
$rule = array(
'selection' => 'required',
'stext' => 'required_if:selection,2|required_if:selection,3',
);
EDIT: Vérifiez la réponse de LePhleg, est plus propre . Au moment de la réponse qui n’était pas possible, vérifiez simplement la question, il utilisait la même méthode mais n’a pas fonctionné.
Il vous suffit de transmettre toutes les valeurs en tant que paramètres, séparés par une virgule:
$rules = array(
'selection' => 'required',
'stext' => 'required_if:selection,2,3'
);
essaye celui-là
si une seule correspondance valeur alors utilisé comme ça
'stext' => 'required_if:selection,2'
si vous avez plusieurs valeurs puis utilisées comme ça (séparées par une virgule)
'stext' => 'required_if:selection,2,3'
pour plus d'informations, voir documentation required_if
Vous pouvez aller de l'avant avec parfois validation pour laravel. vous pouvez définir une fermeture personnalisée comme dans l'exemple ci-dessous
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);
}