【问题标题】:Refactor and Optimize Laravel validation rules (required_with)重构和优化 Laravel 验证规则(required_with)
【发布时间】:2020-07-05 03:06:04
【问题描述】:

我有一个表单,它的输入数量可以根据用户的行数灵活调整。

| row |  FullName  |  Phone    |    Email   |
|------------------------------------------ |
|  1  |    Alex    |     06    |   a@a.com  |
|------------------------------------------ |
|  2  |    Bob     |    968    |            |
|------------------------------------------ |
|  3  |            |           |   j@j.com  |
---------------------------------------------
 _____________________
| Add new User Button |
 ---------------------

当每个用户的任何输入被填满时,这些用户的其他输入都是必需的。

例如:第 2 行出现错误,因为 FullName 和 Phone 已填写,但 Email 为空

第 3 行出错,因为 FullName 和 Phone 为空,但 Email 已填写。

所以我为此编写了如下验证规则:

        $validator = Validator::make($request->all(), [
            'User.*.FullName' => 'required_with:User.*.Phone | required_with:User.*.Email',
            'User.*.Phone' => 'required_with:User.*.FullName | required_with:User.*.Email',
            'User.*.Email' => 'required_with:User.*.FullName | required_with:User.*.Phone',
        ], $this->messages());

每个用户的输入参数数量很大,我这里列出了3种情况(FullName,Phone,Email)。

如果我像上面那样编写验证,代码就会很混乱。如何重构此代码或对这些类型的验证有任何想法?

【问题讨论】:

    标签: laravel validation laravel-5 refactoring laravel-6


    【解决方案1】:

    就像我在我的 message 中所说的那样;

    Laravel 有一个很棒的表单请求验证系统。我强烈建议使用它而不是在控制器中使用所有验证逻辑。

    这个场景看起来和我之前回答的问题一样。当我的验证像这样复杂时,我个人认为最好使用表单请求。因为它更易于阅读和管理。

    实际上你不需要像这样写你的规则;

    required_with:User.*.Phone | required_with:User.*.Email
    

    required_with可以带多个参数,其中一个参数不为空时需要;

    'User.*.FullName' => 'required_with:User.*.Phone,User.*.Email',
    

    注意:如果两个参数都不为空,则需要检查required_with_all

    【讨论】:

      猜你喜欢
      • 2018-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-08
      • 2016-12-17
      • 2020-06-25
      • 2020-06-09
      • 2021-12-09
      相关资源
      最近更新 更多