GRo*_*ing 6 php laravel laravel-5 laravel-validation laravel-5.4
我在Laravel 5.4工作,我有一个稍微具体的验证规则需要,但我认为这应该很容易实现,而不必扩展类.只是不知道如何使这项工作..
我想要做的是'music_instrument'
如果program
数组包含,则使表单字段成为必填字段'Music'
.
我发现这个线程如何设置require如果在laravel验证中的另一个多选字段中选择了值?但它不是一个解决方案(因为它从来没有得到解决),并且它不起作用的原因是因为提交的数组索引不是常量(在索引提交结果时不考虑选中的复选框). ..)
我的情况如下:
<form action="" method="post">
<fieldset>
<input name="program[]" value="Anthropology" type="checkbox">Anthropology
<input name="program[]" value="Biology" type="checkbox">Biology
<input name="program[]" value="Chemistry" type="checkbox">Chemistry
<input name="program[]" value="Music" type="checkbox">Music
<input name="program[]" value="Philosophy" type="checkbox">Philosophy
<input name="program[]" value="Zombies" type="checkbox">Zombies
<input name="music_instrument" type="text" value"">
<button type="submit">Submit</button>
</fieldset>
</form>
Run Code Online (Sandbox Code Playgroud)
如果我从复选框列表中选择一些选项,我可能会在我的$request
值中得到这个结果
[program] => Array
(
[0] => Anthropology
[1] => Biology
[2] => Music
[3] => Philosophy
)
[music_instrument] => 'Guitar'
Run Code Online (Sandbox Code Playgroud)
在这里查看验证规则:https://laravel.com/docs/5.4/validation#available-validation-rules我认为像他这样的东西应该可以工作,但我实际上什么都没得到:
$validator = Validator::make($request->all(),[
'program' => 'required',
'music_instrument' => 'required_if:program,in:Music'
]);
Run Code Online (Sandbox Code Playgroud)
我希望这也能奏效,但没有运气:
'music_instrument' => 'required_if:program,in_array:Music',
Run Code Online (Sandbox Code Playgroud)
思考?建议?
谢谢!
Mar*_*łek 15
没有尝试过,但是在一般的数组字段中,你通常会这样编写:program.*
,所以这样的东西可能会起作用:
$validator = Validator::make($request->all(),[
'program' => 'required',
'music_instrument' => 'required_if:program.*,in:Music'
]);
Run Code Online (Sandbox Code Playgroud)
如果它不起作用,显然你也可以用另一种方式做到这一点,例如:
$rules = ['program' => 'required'];
if (in_array('Music', $request->input('program', []))) {
$rules['music_instrument'] = 'required';
}
$validator = Validator::make($request->all(), $rules);
Run Code Online (Sandbox Code Playgroud)
nul*_*sce 13
我知道这篇文章比较旧,但如果有人再次遇到这个问题。
$validator = Validator::make($request->all(),[
'program' => 'required',
'music_instrument' => 'required_if:program,Music,other values'
]);
Run Code Online (Sandbox Code Playgroud)