top-think/think

验证器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