Laravel 表单请求数组验证自定义规则

谢尔盖福明

我想创建一个表单请求验证,但不知道如何操作。

我有一个表格:

<form>
  <input type="text" name="fullname[0]">
  <input type="text" name="document_num[0]">

  <input type="text" name="fullname[1]">
  <input type="text" name="document_num[1]">

  <input type="text" name="fullname[2]">
  <input type="text" name="document_num[2]">

   .....

  <input type="text" name="fullname[n]">
  <input type="text" name="document_num[n]">

  <input type="submit">
</form>

表'用户':

  id | fullname | document_num
  1  | John     | 111
  2  | Jane     | 112
 ..  | ...      | ...

当用户点击提交时,请求被发送到控制器方法,在那里它首先被表单请求验证(或者它可以是一个常规的验证器)。所以我想写一个规则来检查:

for (i=0; i<numberOfUsersToAdd; i++)

    if  (‘document_num[$i]’ exists in ‘users’ in field ‘document_num’ ) {

       $user = Users::find(id of user in DB having this ‘document_num[$i]’) ; 

       check if (fullname[$i] == $user->fullname) {

                return true} // input-ed users name match his/her name in DB.

        else {return false}  // input-ed users name doesn't match his/her name in DB.

        } 

    else return true; // document_num[$i] doesn't exists in the database which's ok

如果在单词中:检查表 users 中是否存在任何输入的 document_num[$i],如果是,则从 DB 中获取具有此 document_nubmer 的用户,并将他/她的全名值与输入的 fullname[$i] 进行比较。

怎么做?:)

感谢任何帮助!:)

奥马多克斯

好的。此验证的逻辑YourFormRequest是下一个:

  1. 让我们将所有字段标记为必填字段,并将document_num字段附加为整数。您可以添加其他附加约束 - 没关系。
  2. 检查循环的rules方法中YourFormRequest“给定的用户是否存在document_num?”。
  3. 如果它不存在,则可以 - 该字段的验证成功。
  4. 如果它存在,则检查“用户全名是否等于给定的fullname。如果等于则确定 - 该字段的验证成功。否则,如果它失败,则将您的自定义规则附加到该字段,该规则总是失败。

让我们在一个工作示例中看看这种方法。

你的表单请求.php

public function rules()
{
    $rules = [
        'fullname.*' => 'required',
        'document_num.*' => 'required|integer',
    ];

    $documentNums = request()->get('document_num');
    $fullnames = request()->get('fullname');

    for ($i = 0; $i < count($documentNums); $i++) {
        $user = User::where('document_num', $documentNums[$i])->first();
        if ($user && ($user->fullname != $fullnames[$i]) {
            $rules['document_num.' . $i] = "document_num_fail:$i"; //some rule that always fails. As argument we pass a row number of field that fails
        }
    }
    return $rules;
}

CustomValidator.php(例如将其放在 App\Services 文件夹中)

namespace App\Services;

class CustomValidator {

    public function documentNumFailValidate($attribute, $value, $parameters, $validator) {
        return false;
    }

    public function documentNumFailReplacer($message, $attribute, $rule, $parameters) {
        return str_replace([':index'], $parameters[0], $message);
    }
}

在这里你可以看到两个函数。首先 - 验证规则(我们总是传递错误,因为我们需要它)。第二 - 它只是错误信息的替代品。您想知道此错误出现在哪个字段行上(例如分别在第三行和字段:fullname[2] 和 document_num[2])。正如我在上面关于附加失败规则的评论中所写的那样,我们给出了验证方法失败的行数(documentNumFailReplacer方法将用给定的值替换错误消息中的占位符:索引)

下一步 - 在 AppServiceProvider.php 中注册此方法

public function boot()
{
    Validator::extend('document_num_fail',  'App\Services\CustomValidator@documentNumFailValidate');
    Validator::replacer('document_num_fail', 'App\Services\CustomValidator@documentNumFailReplacer');
}

最后一步 - 在validation.php 中定义您的自定义消息

'custom' => [
        'document_num.*' => [
            'document_num_fail' => 'Input-ed user name doesn`t match his/her name in DB for specified :attribute (field position/number: :index)',
        ]
    ],

'attributes' => [
    'document_num.*' => 'document number',
],

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Laravel中自定义模型存储的验证规则

来自分类Dev

Laravel中的正则表达式规则的自定义验证消息?

来自分类Dev

向Laravel表单添加自定义验证错误

来自分类Dev

Laravel验证:存在其他列条件-自定义验证规则

来自分类Dev

我可以在自定义验证类中使用laravel验证规则吗?

来自分类Dev

在Laravel 5中使用表单请求验证时如何添加自定义验证规则

来自分类Dev

Laravel 5中用于自定义验证规则的自定义占位符

来自分类Dev

为laravel5表单验证中的字段设置自定义验证消息?

来自分类Dev

如何在Laravel 5中测试自定义验证规则?

来自分类Dev

如何在laravel 5.2中添加自定义验证规则?

来自分类Dev

如何在Laravel 6 API中创建自定义验证规则

来自分类Dev

在自定义规则文件中使用默认的laravel验证规则

来自分类Dev

Laravel请求数组验证

来自分类Dev

Laravel中的正则表达式规则的自定义验证消息?

来自分类Dev

Laravel 4自定义验证规则-在哪里扩展验证器?

来自分类Dev

在Laravel中自定义模型存储的验证规则

来自分类Dev

Laravel 5自定义验证规则来检查会话数据

来自分类Dev

Laravel 5注册商中的自定义验证规则

来自分类Dev

Laravel 5.1创建自定义验证规则

来自分类Dev

如何使用自定义请求验证laravel数组?

来自分类Dev

表单请求验证中的Laravel自定义字段名称

来自分类Dev

Laravel自定义请求验证的CameCase模型

来自分类Dev

Laravel注册表单上的自定义验证

来自分类Dev

Laravel自定义验证规则

来自分类Dev

Laravel 5.5 / 验证器 / 自定义规则

来自分类Dev

针对 Laravel 5 中输入数组的自定义规则

来自分类Dev

可选的自定义列规则。Laravel 5 验证规则

来自分类Dev

创建自定义消息时,Laravel 自定义请求未捕获规则中的唯一值

来自分类Dev

在 Laravel 中翻译自定义验证规则消息?

Related 相关文章

  1. 1

    在Laravel中自定义模型存储的验证规则

  2. 2

    Laravel中的正则表达式规则的自定义验证消息?

  3. 3

    向Laravel表单添加自定义验证错误

  4. 4

    Laravel验证:存在其他列条件-自定义验证规则

  5. 5

    我可以在自定义验证类中使用laravel验证规则吗?

  6. 6

    在Laravel 5中使用表单请求验证时如何添加自定义验证规则

  7. 7

    Laravel 5中用于自定义验证规则的自定义占位符

  8. 8

    为laravel5表单验证中的字段设置自定义验证消息?

  9. 9

    如何在Laravel 5中测试自定义验证规则?

  10. 10

    如何在laravel 5.2中添加自定义验证规则?

  11. 11

    如何在Laravel 6 API中创建自定义验证规则

  12. 12

    在自定义规则文件中使用默认的laravel验证规则

  13. 13

    Laravel请求数组验证

  14. 14

    Laravel中的正则表达式规则的自定义验证消息?

  15. 15

    Laravel 4自定义验证规则-在哪里扩展验证器?

  16. 16

    在Laravel中自定义模型存储的验证规则

  17. 17

    Laravel 5自定义验证规则来检查会话数据

  18. 18

    Laravel 5注册商中的自定义验证规则

  19. 19

    Laravel 5.1创建自定义验证规则

  20. 20

    如何使用自定义请求验证laravel数组?

  21. 21

    表单请求验证中的Laravel自定义字段名称

  22. 22

    Laravel自定义请求验证的CameCase模型

  23. 23

    Laravel注册表单上的自定义验证

  24. 24

    Laravel自定义验证规则

  25. 25

    Laravel 5.5 / 验证器 / 自定义规则

  26. 26

    针对 Laravel 5 中输入数组的自定义规则

  27. 27

    可选的自定义列规则。Laravel 5 验证规则

  28. 28

    创建自定义消息时,Laravel 自定义请求未捕获规则中的唯一值

  29. 29

    在 Laravel 中翻译自定义验证规则消息?

热门标签

归档