0

0

Laravel 中如何验证多个数值之和?

霞舞

霞舞

发布时间:2025-11-01 10:39:38

|

797人浏览过

|

来源于php中文网

原创

laravel 中如何验证多个数值之和?

本文介绍了如何在 Laravel 中自定义验证规则,以确保多个输入字段的数值之和等于特定值。通过扩展 Laravel 的验证器,可以轻松实现自定义验证逻辑,并将其应用于表单提交或其他需要数值验证的场景。

在 Web 开发中,经常需要验证用户输入的数据是否符合特定的业务规则。例如,在处理财务数据时,可能需要确保多个输入字段的数值之和等于预期的总数。 Laravel 提供了强大的验证机制,但对于这种自定义的验证需求,我们需要扩展其功能。

自定义验证规则

Laravel 允许我们通过 Validator::extend 方法自定义验证规则。该方法接受两个参数:规则的名称和一个闭包函数,该闭包函数定义了验证逻辑。

以下代码展示了如何创建一个名为 sumsTo 的自定义验证规则,该规则用于验证多个字段的数值之和是否等于指定的值:

use Illuminate\Support\Facades\Validator;
use Illuminate\Http\Request;

Validator::extend('sumsTo', function ($attribute, $value, $parameters) {
    $expected = floatval(array_shift($parameters));
    $otherParameters = request()->only($parameters);
    return floatval(array_sum(array_merge(array_values($otherParameters), [ $value ]))) === $expected;
});

代码解释:

  1. Validator::extend('sumsTo', ...): 这行代码注册了一个名为 sumsTo 的自定义验证规则。
  2. $attribute: 当前正在验证的字段的名称。
  3. $value: 当前正在验证的字段的值。
  4. $parameters: 传递给验证规则的参数数组。 在我们的例子中,第一个参数是期望的总和,其余参数是要参与求和的其他字段的名称。
  5. $expected = floatval(array_shift($parameters)): 从参数数组中取出期望的总和,并将其转换为浮点数。 array_shift 函数会移除数组的第一个元素并返回它。
  6. $otherParameters = request()->only($parameters): 从请求中获取其他字段的值。 request()->only($parameters) 会返回一个包含指定字段及其对应值的数组。
  7. array_merge(array_values($otherParameters), [ $value ]): 将当前字段的值与从请求中获取的其他字段的值合并到一个数组中。 array_values 函数用于获取数组的所有值,并创建一个新的索引数组。
  8. floatval(array_sum(...)): 计算合并后的数组中所有数值的总和,并将其转换为浮点数。
  9. return ... === $expected: 比较计算得到的总和与期望的总和,如果相等则返回 true,否则返回 false。

使用自定义验证规则

定义了自定义验证规则后,就可以在控制器中使用它了。以下代码展示了如何在 store 方法中使用 sumsTo 规则:

PHP5 和 MySQL 圣经
PHP5 和 MySQL 圣经

本书是全面讲述PHP与MySQL的经典之作,书中不但全面介绍了两种技术的核心特性,还讲解了如何高效地结合这两种技术构建健壮的数据驱动的应用程序。本书涵盖了两种技术新版本中出现的最新特性,书中大量实际的示例和深入的分析均来自于作者在这方面多年的专业经验,可用于解决开发者在实际中所面临的各种挑战。

下载
public function store(Request $request) {
    $data = $request->validate([
        'number1' => 'required|numeric|sumsTo:100,number2,number3',
        'number2' => 'required|numeric|sumsTo:100,number1,number3',
        'number3' => 'required|numeric|sumsTo:100,number1,number2',
    ]);

    $myDb = new Mynumber();
    $myDb->number1 = $data['number1'];
    $myDb->number2 = $data['number2'];
    $myDb->number3 = $data['number3'];
    $myDb->save();
}

代码解释:

  1. 'number1' => 'required|numeric|sumsTo:100,number2,number3': 这行代码指定了 number1 字段的验证规则。 它要求该字段必须存在 (required),必须是数值 (numeric),并且与其他字段 (number2 和 number3) 的数值之和必须等于 100 (sumsTo:100,number2,number3)。
  2. 类似地,number2 和 number3 字段也使用了相同的验证规则,以确保所有三个字段的数值之和都等于 100。

自定义错误消息

默认情况下,Laravel 会为自定义验证规则生成通用的错误消息。为了提供更友好的用户体验,我们可以自定义错误消息。

可以通过在 resources/lang/zh_CN/validation.php (或其他语言文件) 中添加以下内容来定义自定义错误消息:

    'sums_to' => 'The sum of :attribute and other specified fields must be :expected.',

然后在验证规则中使用 :attribute 和 :expected 占位符,它们会被替换为实际的字段名称和期望的总和。

注意事项

  • 确保传递给 sumsTo 规则的参数数量正确。第一个参数必须是期望的总和,其余参数必须是要参与求和的其他字段的名称。
  • 自定义验证规则应该在服务提供者中注册,例如 AppServiceProvider。
  • 如果需要更复杂的验证逻辑,可以考虑创建一个自定义验证器类。

总结

通过自定义验证规则,我们可以轻松地扩展 Laravel 的验证机制,以满足各种自定义的验证需求。 sumsTo 规则只是一个简单的示例,你可以根据自己的实际需求创建更复杂的验证规则。 记住,良好的数据验证是构建安全可靠的 Web 应用程序的关键组成部分。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2916

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1740

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

1568

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

1120

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1566

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1297

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1689

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1310

2023.11.13

Python 自然语言处理(NLP)基础与实战
Python 自然语言处理(NLP)基础与实战

本专题系统讲解 Python 在自然语言处理(NLP)领域的基础方法与实战应用,涵盖文本预处理(分词、去停用词)、词性标注、命名实体识别、关键词提取、情感分析,以及常用 NLP 库(NLTK、spaCy)的核心用法。通过真实文本案例,帮助学习者掌握 使用 Python 进行文本分析与语言数据处理的完整流程,适用于内容分析、舆情监测与智能文本应用场景。

6

2026.01.27

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 9.7万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.2万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号