Laravel 验证规则(如果值存在于另一个字段数组中)

我在Laravel 5.4中工作,我有一个稍微具体的验证规则需求,但我认为这应该很容易实现,而不必扩展类。只是不知道如何做到这一点。

我想做的是,如果数组包含,则使表单字段成为必填字段。'music_instrument'program'Music'

我发现这个线程 如果在验证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>

如果我从复选框列表中选择一些选项,我可能会在我的值中产生此结果$request

[program] => Array
    (
        [0] => Anthropology
        [1] => Biology
        [2] => Music
        [3] => Philosophy
    )

[music_instrument] => 'Guitar'

看看这里的验证规则:https://laravel.com/docs/5.4/validation#available-validation-rules 我认为像他这样的东西应该工作,但我实际上什么也没得到:

  $validator = Validator::make($request->all(),[
        'program'           => 'required',
        'music_instrument'  => 'required_if:program,in:Music'
  ]);

我希望这也能起作用,但没有运气:

'music_instrument'  => 'required_if:program,in_array:Music',

思潮?建议?

谢谢!


答案 1

还没有尝试过,但是在一般的数组字段中,你通常这样写:,所以也许这样的东西会起作用:program.*

  $validator = Validator::make($request->all(),[
        'program'           => 'required',
        'music_instrument'  => 'required_if:program.*,in:Music'
  ]);

如果它不起作用,显然你也可以用另一种方式来做,例如:

$rules = ['program' => 'required'];

if (in_array('Music', $request->input('program', []))) {
    $rules['music_instrument'] = 'required';
}

$validator = Validator::make($request->all(), $rules);

答案 2

我知道这篇文章比较旧,但如果有人再次遇到这个问题。

$validator = Validator::make($request->all(),[
    'program' => 'required',
    'music_instrument'  => 'required_if:program,Music,other values'
]);

推荐