【问题标题】:Laravel validation - different array fields not workingLaravel 验证 - 不同的数组字段不起作用
【发布时间】:2020-09-30 07:13:59
【问题描述】:

我正在使用 Laravel 7。假设我有这个颜色下拉列表:黄色、蓝色、橙色、黑色等。这些没有存储在数据库中。

在我有最喜欢的颜色和最不喜欢的颜色的表格中,每个字段可以选择一种以上的颜色。 IE。我最喜欢的颜色可以是蓝色和黄色,我最不喜欢的颜色可以是黑色。两个字段都是数组字段(favorite_colors[], least_favorite_colors[])

在我的 laravel 验证中,我想确保颜色不能同时包含在最喜欢的颜色和最不喜欢的颜色中。 IE。如果我将蓝色添加为我最喜欢的颜色,那么蓝色就不会出现在我最不喜欢的颜色列表中。

我试过了:

[...
'favorite_colors'   => 'required|array',
'favorite_colors.*' => 'required|different:least_favorite_colors.*', /*not working */
...]

但它不起作用

【问题讨论】:

    标签: php laravel laravel-validation


    【解决方案1】:

    似乎是 not in 验证规则的一个用例。

    not_in:foo,bar,... 验证中的字段不得包含在给定的值列表中。 Rule::notIn 方法可以用来流畅地构造规则:...

    所以你应该检查最喜欢的颜色数组中的每个值是否不在最不喜欢的颜色数组中。

    [...
    'favorite_colors' => 'required|array|distinct',
    'favorite_colors.*' => 'required|notIn::{$this->input("least_favorite_colors")}'
    
    • 尚未对此进行测试

    Different 用于将一个字段与另一个字段进行比较。要使用不同的颜色,您必须针对每种最不喜欢的颜色检查某种循环。

    【讨论】:

      【解决方案2】:

      感谢@Haze 的输入,正确的使用方法是:

      use Illuminate\Validation\Rule;
      

      和这样的验证:

      'favorite_colors.*' => ['required', Rule::notIn($request->post('least_favorite_colors'))],            
      

      如果使用

      'favorite_colors.*' => 'required|different:least_favorite_colors.*',
      

      它只会比较 favorite_colors 数组 0 和 least_favorite_colors 数组 0、数组 1 和数组 1 等等。

      【讨论】:

        猜你喜欢
        • 2019-10-16
        • 1970-01-01
        • 1970-01-01
        • 2019-01-24
        • 2017-10-08
        • 2023-04-11
        • 1970-01-01
        • 2018-06-19
        • 1970-01-01
        相关资源
        最近更新 更多