验证器bug-rule中设置了名称的(username|用户名),在场景中append的规则被多次调用
Opened this issue · 0 comments
版本:thinkphp 6.0.4
6.0.4里的- [修正] 改进验证的append方法处理造成多次验证的情况
并没有真正解决此问题,希望好好分析下再修正
5.1.31存在同样的问题,希望尽快修复
测试样例:
控制器Index.php
`<?php
namespace app\controller;
use app\BaseController;
use app\validate\User;
class Index extends BaseController
{
public function index()
{
try {
validate(User::class)
->scene('edit')
->check([
'username' => 'thinkphp'
]);
} catch (ValidateException $e) {
// 验证失败 输出错误信息
dump($e->getError());
}
return 'thinkphp';
}
}
`
php think make:validate User
`<?php
declare (strict_types = 1);
namespace app\validate;
use think\Validate;
use think\facade\Log;
class User extends Validate
{
protected $rule = [
'username|用户名'=>'require', //主要是因为这里 设置了 |用户名 这个标题 才导致的问题
];
protected $message = [];
// edit 验证场景定义
public function sceneEdit()
{
return $this->only(['username'])
->append('username', 'checkName1')
;
}
// 自定义验证规则
protected function checkName1($value, $rule, $data=[])
{
Log::write('checkName1-'.time(),'error');
return true;
}
}`
日志,同一秒两次
[2020-09-29T14:44:55+08:00][error] checkName1-1601361895
[2020-09-29T14:44:55+08:00][error] checkName1-1601361895