Laravel-自定义验证

Laravel-自定义验证,laravel,validation,Laravel,Validation,我有以下验证: $data = request()->validate([ 'qty100' => ['integer'], 'qty250' => ['integer'], 'qty500' => ['integer'], ]); 我需要检查其中是否至少有一个大于0。。。如何做到这一点?我认为没有内置的验证规则可以实现您在Laravel中想要的功能,因此您需要实现一个自定义验证程序,它可以让您在需要时重用验证 这

我有以下验证:

$data = request()->validate([
        'qty100' => ['integer'],
        'qty250' => ['integer'],
        'qty500' => ['integer'],
    ]);

我需要检查其中是否至少有一个大于0。。。如何做到这一点?

我认为没有内置的验证规则可以实现您在Laravel中想要的功能,因此您需要实现一个自定义验证程序,它可以让您在需要时重用验证

这是一种方法

request()->验证([
'intone'=>['required'、'integer'、'greaterthanzerotoutall:inttwo、intthree'],
'inttwo'=>['required','integer'],
'intthree'=>['required','integer'],
]);
在您的
AppServiceProvider中

公共函数启动()
{
//我们正在创建一个自定义规则。名为“greaterThanZeroWithoutAll”
//$attribute是我们正在验证的名称,
//$value是我们从请求中获得的值,
//$parameters是我们传入的参数,类似于大于零的参数,不带all:inttwo、intthree、inttwo和intthree是参数
//$validator是验证器对象。
验证器::扩展('greaterthanzerwithoutall',函数($attribute,$value,$parameters,$Validator){
//$validator->getData()是大于零且不包含所有规则的所有键值对。
//数组_值($validator->getData())我们只对值感兴趣,因此这将返回所有值。
//内爆(数组_值($validator->getData())将把它转换为字符串
//!(int)内爆(array_values($validator->getData())内爆时不使用胶水,然后显式将生成的字符串强制转换为整数,然后使用求反将0计算为true,将非零计算为false。(通常,0计算为false,所有其他值计算为true。)
如果(!(int)内爆(数组_值($validator->getData())){
//表示所有值均为0
返回false;
}
返回true;
});
//这是一条错误消息
验证器::替换器('greaterThanZeroWithoutAll',函数($message,$attribute,$rule,$parameters){
返回“并非所有字段都大于0”;
});
}
!(int)内爆(array_values($validator->getData())
这段代码基本上检查所有的值是否为零,应该还有很多其他方法可以做到这一点


我们只对第一个值执行此操作的原因是,我们将其他两个值传入并与之进行比较。所以,它做到了。

我认为没有内置的验证规则可以实现您在Laravel中想要的功能,因此您需要实现一个自定义验证程序,它可以让您在需要时重用验证

这是一种方法

request()->验证([
'intone'=>['required'、'integer'、'greaterthanzerotoutall:inttwo、intthree'],
'inttwo'=>['required','integer'],
'intthree'=>['required','integer'],
]);
在您的
AppServiceProvider中

公共函数启动()
{
//我们正在创建一个自定义规则。名为“greaterThanZeroWithoutAll”
//$attribute是我们正在验证的名称,
//$value是我们从请求中获得的值,
//$parameters是我们传入的参数,类似于大于零的参数,不带all:inttwo、intthree、inttwo和intthree是参数
//$validator是验证器对象。
验证器::扩展('greaterthanzerwithoutall',函数($attribute,$value,$parameters,$Validator){
//$validator->getData()是大于零且不包含所有规则的所有键值对。
//数组_值($validator->getData())我们只对值感兴趣,因此这将返回所有值。
//内爆(数组_值($validator->getData())将把它转换为字符串
//!(int)内爆(array_values($validator->getData())内爆时不使用胶水,然后显式将生成的字符串强制转换为整数,然后使用求反将0计算为true,将非零计算为false。(通常,0计算为false,所有其他值计算为true。)
如果(!(int)内爆(数组_值($validator->getData())){
//表示所有值均为0
返回false;
}
返回true;
});
//这是一条错误消息
验证器::替换器('greaterThanZeroWithoutAll',函数($message,$attribute,$rule,$parameters){
返回“并非所有字段都大于0”;
});
}
!(int)内爆(array_values($validator->getData())
这段代码基本上检查所有的值是否为零,应该还有很多其他方法可以做到这一点


我们只对第一个值执行此操作的原因是,我们将其他两个值传入并与之进行比较。所以,它就这样做了。

为什么不用
if
语句验证它呢?如果它们都不大于0,则返回
ValidationException::withErrors([])
。为什么不使用
If
语句对其进行验证呢?如果它们都不大于0,则返回
ValidationException::withErrors([])
。谢谢!你能解释一下它是怎么工作的吗?你为什么只检查语调?你好,直到现在我才有机会实现这个。。但是它不起作用。。我收到错误消息:
调用未定义的方法illumb\Contracts\Validation\Validator::extend()
ok,我通过更改使用路径修复了以前的错误。但这条规则不起作用。它正确地返回false,但验证没有失败。找到了问题。。数据也包含一个“\u令牌”。。那永远不会是空的…谢谢你!你能解释一下它是怎么工作的吗?你为什么只检查语调?你好,直到现在我才有机会实现这个。。但是它不起作用。。我收到错误消息:
调用未定义的方法illumb\Contracts\Validation\Validator::extend()
ok,我通过更改使用路径修复了以前的错误。但这条规则不起作用