自定义 Laravel 验证规则示例

Posted

技术标签:

【中文标题】自定义 Laravel 验证规则示例【英文标题】:custom Laravel Validation Rule example 【发布时间】:2016-11-14 03:19:58 【问题描述】:

我很难弄清楚如何在 Laravel 5.1 中编写自定义验证规则。我读过documentation,但似乎不完整。仔细看,我只是看不到我应该把我的实际验证逻辑放在哪里,比如if (stristr($string, 'test')) ...等等。

另一方面,它没有显示错误消息定义应该在哪个方法/数组中:

"foo" => "Your input was invalid!",

"accepted" => "The :attribute must be accepted.",

// The rest of the validation error messages...

我的实际用例有些奇怪,所以对于这个问题,我们以验证安全密码为例。安全密码必须至少有 8 个字符长,包含一个小写和大写字母、一个数字和一个特殊字符。

实际上,对于一个例子来说,这是一个相当高的要求,那么只检查一个数字怎么样?或者对值运行任何字符串函数?

如何创建这样的验证规则?

【问题讨论】:

你检查过这个链接 - laravel.com/docs/5.1/validation#custom-validation-rules 吗?添加新的自定义验证更容易 @Jobayer 我在我的问题中确实把它联系起来了。 我认为如果有人想用不在表格中的东西进行验证,就会遇到这个问题。我也在寻找答案。 我使用“手动创建验证器”和 After Validation Hook 来解​​决这个问题 【参考方案1】:

如document you've linked 中所述,您需要使用静态extend 方法将验证逻辑放入ServiceProviderboot 函数中(例如AppServiceProvider)。

这是一个简短的示例(与文档中的示例相关联)。

<?php

namespace App\Providers;

use Validator;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider

    public function boot()
    
        Validator::extend('yourFunctionNameHere', function($attribute, $value, $parameters, $validator) 
            return $value == 'yourTestValueHere'; //change the body as you need it
        );
    
 

用户的输入分配给$value

【讨论】:

这是我不明白的——我在哪里实际测试值?我应该把if (strlen($string)) &lt; 12 ) ...之类的东西放在哪里? 值是用户插入的文本/字符串;) 您是否真的进行了自己的自定义验证,或者您只是从文档中复制?你的例子没有回答我提出的问题。 sitepoint.com/… 正是您所需要的。当我需要这样的东西时,我会做一些不同的事情,但它会让你继续前进。只是你想如何构建它的问题。 不是我真正的答案,但我有一些自定义验证规则可以扩展验证器。我的有一些细微差别。如果我有时间,我可以发布我自己的示例之一。

以上是关于自定义 Laravel 验证规则示例的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 自定义验证规则

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

为自定义验证规则命名 - Laravel 8

Laravel 验证:存在附加列条件 - 自定义验证规则

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

具有多个参数的 Laravel 自定义验证规则 [重复]