php - 如果值存在于另一个字段数组中,Laravel 验证规则

标签 php laravel laravel-5 laravel-5.4 laravel-validation

我在 Laravel 5.4 中工作,我需要一个稍微具体的验证规则,但我认为这应该很容易实现,而无需扩展类。只是不确定如何进行这项工作..

我想做的是制作 'music_instrument'如果 program,则必须填写表单字段数组包含 'Music' .

我找到了这个帖子 How to set require if value is chosen in another multiple choice field in validation of 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 中得到这个结果。值(value)观

[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',

想法?有什么建议吗?

谢谢!

最佳答案

还没有尝试过,但是在一般的数组字段中你通常这样写: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);

关于php - 如果值存在于另一个字段数组中,Laravel 验证规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43147584/

相关文章:

php - PHP foreach 循环中的数组范围

php - 从今天输入的mysql中拉取数据

php - 在 PHP 中生成大于 2,147,483,647 的整数

php - 如何在 Laravel5 中更改 View 文件夹?

laravel - 设计 Laravel 缓存(Redis)架构

PHP 如何在 aws s3 存储桶中创建文件夹?

laravel - 为什么我的 view-policy 有效,但我的 viewAny-policy 无效?

jquery - Laravel Blade使用jquery加载方法

Laravel 查询上的 Mysql 排序错误,与搜索参数相关

mysql - Laravel 路由参数未修剪(通常在添加空格时有效)