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

2024-01-12

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

我有一个表格:

<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],如果是,则从数据库中获取具有此 document_numer 的用户,并将他/她的全名值与输入中的 fullname[$i] 进行比较。

怎么做?:)

感谢任何帮助!:)


好的。此验证的逻辑在YourFormRequest接下来是:

  1. 让我们根据需要标记所有字段并document_num字段附加为整数。您可以添加其他附加约束 - 这并不重要。
  2. In 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方法将用给定值替换错误消息中的占位符:index)

下一步 - 在 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',
],
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Laravel 表单请求数组验证自定义规则 的相关文章

  • 必填字段验证器中的数字验证

    是否可以将数字验证放入 asp net 文本框中的必填字段验证器中 您应该使用比较验证器 http msdn microsoft com en us library system web ui webcontrols comparevali
  • 在 laravel 中禁用特定路由的 csrf

    我有一个支付系统 数据被提交到第三方网站然后被拉回 当数据返回时 它会到达特定的 url 比如 ok 路由 REQUEST transaction 但由于 Laravel 中间件 我遇到了令牌不匹配的情况 第三方支付API无法生成token
  • Laravel Schema Builder 改变存储引擎

    我正在尝试更改表并将其存储引擎更改为InnoDb 当我跑步时php artisan migrate它完成且没有错误 然而 当我检查 Sequel Pro 中的存储引擎时 没有任何变化 public function up Schema ta
  • 表单序列化javascript(无框架)

    想知道 javascript 中是否有一个没有 jquery 或任何框架的函数可以让我序列化表单并访问序列化版本 2023 年更新 Use FormData https developer mozilla org en US docs We
  • XHTML 和文本区域内的代码

    在我的一个使用文本区域进行提交的网站上 我的代码可以显示如下所示的内容
  • AJAX 表单正在向自身提交?

    我不知道今晚发生了什么 但我似乎无法让 AJAX 工作 提交表单后 它会使用 URL 中的值刷新页面 我正在使用具有提交处理程序的验证插件 但它仍然会刷新 我以前用过这个方法 没有出现任何问题 看看这里的页面 让我知道您的想法 div cl
  • Laravel 5.6 - 注册表无法正常工作并且不显示任何错误

    在我最近的一个项目中 定制登记表不管用 当我单击注册按钮时 它会重新加载注册表单 不会打印任何错误 并且不会将数据插入数据库中 这是注册表的外观 这里是移民文件代码 public function up Schema create user
  • 如何从子窗体访问winforms父窗体控件

    在 Form1 中 我有一个 DataGridView 和多个文本框 当我单击 Form2 中的 A 按钮时 我需要将 DataGridView 和多个文本框中的数据保存到数据库中 如何在C Sharp Windows应用程序中实现 For
  • RegularExpressionValidator.ValidationExpression 强制长度为 10 或 12 个符号

    RegularExpressionValidator ValidationExpression d 10 仅表示数字 最多 10 位 RegularExpressionValidator ValidationExpression d 10
  • 如果您编辑/更新该特定对象,laravel 唯一名称表示已被占用

    我有一个投资组合表 我没有在 url 中显示投资组合的 id 而是使用 getRouteKeyName 显示投资组合的名称 所以我希望该名称是唯一的 否则如果它已经存在 它可能会显示错误的投资组合 我将名称字段的规则设置为唯一 如果我现在编
  • 使用 Python Mechanize 与 Flash 交互

    我正在尝试用 Python 创建一个处理 Flash 的自动化程序 现在我正在使用Python Mechanize 它非常适合填写表格 但是当涉及到flash时我不知道该怎么办 有谁知道我如何通过 Python mechanize 或其他一
  • 验证纬度和经度

    我想验证纬度和经度 现在 我只是检查该值是否不为空 但我想要进行验证以检查它是否是有效的纬度或经度 我怎么做 我的财产是这样的 public string Lat get return this lat set base Validatio
  • 安装后如何使用 npm 包 (chart.js)?

    我正在制作一个练习 Laravel 站点 并且我已经通过 npm install 安装了 Chart js 这是一个愚蠢的问题 但现在我如何从这里使用它 或通过 npm 安装的任何东西 这些文件安装在节点模块文件夹中 我应该在页眉中使用标签
  • 来自控制器的 Rails 验证

    有一个联系页面 可以输入姓名 电话 电子邮件和消息 然后发送到管理员的电子邮件 没有理由将消息存储在数据库中 问题 如何 在控制器中使用 Rails 验证 根本不使用模型 或者 在模型中使用验证 但没有任何数据库关系 UPD Model c
  • PHP文件上传

    如果我想在文件名转到服务器的永久位置 而不是临时位置 之前更改文件名 我该如何执行此操作 代码如下
  • 如何使用 then() 将 Fetch 响应的 JSON 正文传递给 Throw Error()?

    EDIT 你误会了 考虑这个伪代码 这本质上是我想做的 但这样写是行不通的 一旦您使用 Fetch 收到 Laravel 422 响应 response不包含实际的 JSON 数据 你必须使用response gt response jso
  • 如何解决 Laravel 8 UI 分页问题?

    我在尝试最近发布的 laravel 8 时遇到了问题 我试图找出变化是什么以及它是如何工作的 当我这样做时 我遇到了分页 laravel 8 UI 变得混乱的问题 不知何故它发生了 有人可以帮助我吗 或者经历过同样的事情 像这样我在 lar
  • 如何将自己的js文件导入到vite中?

    我将 Laravel 与 Vite 结合使用 我想使用 Vanilla JS 代码添加文件 在我使用mix之前 我从来没有使用过Vite 我尝试将此代码添加到文件 vite config js 中 如下例所示 laravel input r
  • jQuery 变量在定义时声称它是未定义的

    我试图在同一页面上有两个自动填充文本框 一个用于手机型号 input1 一个用于固件 input2 当两者都填充时 我希望显示一个带有ID input1input2 的div 但是当在input1 中输入值时 它声称phone 的变量未定义
  • 带 url 参数的 Laravel post 路由

    我面临着幼虫路由的大墙 我似乎找不到解决方案 我在视图模板中有此表单

随机推荐

  • 从 C# 列表中选择唯一元素

    如何从列表中选择独特的元素 0 1 2 2 2 3 4 4 5 这样我得到 0 1 3 5 有效去除的所有实例重复的元素 2 4 var numbers new 0 1 2 2 2 3 4 4 5 var uniqueNumbers fro
  • 如何使用 EWS 从 Outlook 联系人读取扩展属性

    我当前正在尝试通过 Microsoft 的 EWS 托管 API 从 Outlook 联系人对象读取某些属性 我从以下位置检索这些联系人对象FindItems 功能 其中一些字段是扩展属性 例如Title or User1领域 我很难阅读它
  • iOS 上 JavaScriptCore 虚拟机的强制垃圾回收

    有没有办法强制 iOS 或 Mac OS JavaScriptCore VM 垃圾收集器运行 我只需要它来测试内存泄漏 所以私有 API 就可以了 使用 JSBase h 中的以下函数 function JSGarbageCollect a
  • 哪些 Knockout.js 绑定是“双向”的?

    Knockout js 拥有双向绑定 并且实例展示 http knockoutjs com examples helloWorld html如何value绑定 当应用于文本输入时 更新视图模型 但是 我尝试更新其他绑定 例如text 发现视
  • Python二进制文件读取问题

    我正在尝试在 Python 中读取一个二进制文件 代表 Matlab 中的矩阵 但我在读取文件并将字节转换为正确的值时遇到问题 二进制文件由一系列 4 字节数字组成 前两个数字分别是行数和列数 我的朋友给了我一个他编写的 Matlab 函数
  • 为什么返回 Java 对象引用比返回原语慢得多

    我们正在开发一个延迟敏感的应用程序 并且一直在对各种方法进行微基准测试 使用jmh http openjdk java net projects code tools jmh 在对查找方法进行微基准测试并对结果感到满意后 我实现了最终版本
  • 如何在Azure Function App中禁用只读模式?

    我从 Azure 门户创建一个新的 Function App v2 然后 我借助 Azure Functions Core Tools v2 3 在本地计算机上启动一个新应用程序 并将其发布到门户上的新应用程序 func init func
  • 如何使用 PHP 从多列中选择最小值

    我有一个包含以下内容的表 6xx 8xx 9xx 11xx 12xx 1 0 01 0 002 0 004 0 001 0 025 2 0 025 0 125 0 002 0 01 0 011 我想找到该列中的最小值 使该列变为绿色 例如
  • 从整数创建 LocalDate 对象

    如果我已经有一个日期的月份 日期和年份作为整数 那么使用它们创建一个日期的最佳方法是什么 LocalDate目的 我找到了这个帖子字符串到本地日期 https stackoverflow com questions 8746084 stri
  • 在 Android 上访问高 fps 相机

    有些手机官方支持高 fps 录制 例如 Galaxy S5 和 S6 我尝试了两者 两者都可以使用默认相机应用程序录制高 fps 视频 60 甚至 120 fps 或者在 S6 上使用 Gear VR 的 直通相机 功能 但是 当您通过标准
  • 防止 PyQt 消除槽中发生的异常

    据我所知 如果 PyQt 下的插槽中发生异常 异常会打印到屏幕上 但不会冒泡 这在我的测试策略中产生了一个问题 因为如果某个槽中发生异常 我将不会看到测试失败 这是一个例子 import sys from PyQt4 import QtGu
  • 使用背景图像作为项目符号对齐中心列表项

    我已经尝试解决这个问题一个小时了 但找不到解决方案 我想要的是一个居中列表 背景图像为 刻度 我要这个 正常工作 除了点与列表左侧对齐之外ul 1140px 宽 而不是列表项的左侧li这是居中的 你可以使用CSS before伪类 ul l
  • 获取给定 DN 的 NT 样式域\用户

    我有 Active Directory 中用户的 DN 我想从中获取 NT 样式 域 用户 sAMAccountname AD 属性为我提供了用户部分 但是域呢 Thanks 您可以通过获取用户 DN 的最后部分 DC domain DC
  • 如何设置每 10 次触发 LLDB 断点?

    要调试高频计时器或传感器的值 配置一个仅每 x 次触发的断点会很有用 实现这一目标的最佳方法是什么 我在 Xcode 中尝试了 停止前忽略 x 次 选项 但这仅适用于第一次 我可以使用 LLDB 命令重置此计数器吗 您可以随时使用以下命令重
  • 子窗体定位如 StatusBar

    我有一个带有菜单栏和状态栏的 MDIForm 当我创建一个子窗体并将其定位为 Align alBottom 时 该窗体会离开屏幕区域 并且主窗体滚动条被激活 如何将子窗体定位在状态栏上方 对于没有父级负责显示它的控件 对齐和锚点并不能真正按
  • Swift - 在面部识别运行后,使用 Apple 登录始终会导致“注册未完成”

    我首先按照本教程使用 Firebase 设置 使用 Apple 登录 https medium com swift products sign in with apple with firebase authentication xcode
  • 针对动态变量的 If 语句[重复]

    这个问题在这里已经有答案了 我正在尝试做类似以下的事情 New Variable Name state name Value True if state name eq True Write Host Pass else Write Hos
  • css和xhtml中的每个元素和属性、属性是否有必要使用小写?

    4 2 元素和属性名称必须小写 XHTML 文档的所有 HTML 元素和属性名称必须使用小写 这种差异是必要的 因为 XML 区分大小写 例如 和 是不同的标签 来源 http www w3 org TR 2002 REC xhtml1 2
  • 多个 selectInput 值会产生意外的 dplyr (postgres) 行为

    我有一个可爱的闪亮应用程序 它接受 selectInput 值 查询 postgres 数据库 并输出一个图表 这是一个简单的界面 但由于 dplyr 数据库连接 很难在这里重现 今天我将第一个 selectInput 值更改为 multi
  • Laravel 表单请求数组验证自定义规则

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