我有这样的下拉菜单
<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">
我想要laravel
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。为什么? 我怎么能解决它?
之前感谢。
答案 0 :(得分:28)
我认为require_if验证每次只接受一个值。 尝试更改验证码,如下所示:
$rule = array(
'selection' => 'required',
'stext' => 'required_if:selection,2|required_if:selection,3',
);
编辑: 检查LePhleg的答案,更清洁。 在答案不可能时,只需检查问题,他使用相同的方法但没有工作。
答案 1 :(得分:26)
您只需将所有值作为以逗号分隔的参数传递:
$rules = array(
'selection' => 'required',
'stext' => 'required_if:selection,2,3'
);
答案 2 :(得分:1)
尝试这个
如果是单个匹配值,则可以这样使用
'stext' => 'required_if:selection,2'
如果您有多个值,请像这样使用(用逗号分隔)
'stext' => 'required_if:selection,2,3'
有关更多信息,请参见文档required_if
答案 3 :(得分:0)
您可以继续进行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);
}