|
|
|
@ -2,6 +2,7 @@ |
|
|
|
|
|
|
|
namespace App\Listener; |
|
|
|
|
|
|
|
use Hyperf\DbConnection\Db; |
|
|
|
use Hyperf\Event\Contract\ListenerInterface; |
|
|
|
use Hyperf\Validation\Contract\ValidatorFactoryInterface; |
|
|
|
use Hyperf\Validation\Event\ValidatorFactoryResolved; |
|
|
|
@ -37,7 +38,7 @@ class ValidatorFactoryResolvedListener implements ListenerInterface |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
// 注册了 strlen 验证器规则
|
|
|
|
// 注册了 strlen 验证器规则,参数是min,max,最小长度和最大长度
|
|
|
|
$validatorFactory->extend('strlen', function ($attribute, $value, $parameters, $validator) { |
|
|
|
return mb_strlen($value)>=$parameters[0] && mb_strlen($value)<=$parameters[1]; |
|
|
|
}); |
|
|
|
@ -72,5 +73,36 @@ class ValidatorFactoryResolvedListener implements ListenerInterface |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
// 注册了 exists_enable 验证器规则,参数是table,field,where1,where2...
|
|
|
|
$validatorFactory->extend('exists_enable', function ($attribute, $value, $parameters, $validator) { |
|
|
|
|
|
|
|
// 查询
|
|
|
|
$builder = Db::table($parameters[0])->where($parameters[1], '=', $value); |
|
|
|
|
|
|
|
$whereArr = array_slice($parameters,2); |
|
|
|
if (!empty($whereArr)) { |
|
|
|
foreach ($whereArr as $key => $where) { |
|
|
|
$builder->whereRaw($where); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return $builder->exists(); |
|
|
|
}); |
|
|
|
|
|
|
|
// 注册了 not_equal 验证器规则,参数是anotherfield,table,primary_field,foreign_field
|
|
|
|
// 要排除对比的字段请求参数名、表名、本参数对应表id、比较字段
|
|
|
|
$validatorFactory->extend('not_equal', function ($attribute, $value, $parameters, $validator) { |
|
|
|
|
|
|
|
// 获取比较字段参数值
|
|
|
|
$foreignValue = $validator->getData()[$parameters[0]]; |
|
|
|
|
|
|
|
// 查询
|
|
|
|
$builder = Db::table($parameters[1]) |
|
|
|
->where($parameters[2], '=', $value) |
|
|
|
->where($parameters[3], '!=', $foreignValue) |
|
|
|
; |
|
|
|
|
|
|
|
return $builder->exists(); |
|
|
|
}); |
|
|
|
} |
|
|
|
} |