[top-think/think]validate 调用场景后原验证失效

2023-12-18 256 views
3

在controller 中使用 $this->validate(['name' => 'test'], 'app\common\validate\SomeVali.somescene') //true 后,sence的信息会保留在验证器中 下一次调用时,原本设置没有场景的验证会失效,沿用somescene的验证 $this->validate(['name'=>'test'], 'app\common\validate\SomeVali') //true 此时验证失效

namespace app\common\validate class SomeVali extends Validate { $rule = [ 'id' => 'require', 'name' => 'require' ] $scene = [ 'somesence' => ['name'] ] }

$validator = new app\common\validate\SomeVali 也会出现同样的情况

回答

6

我查看了源码后发现这样的情况似乎是有考虑过的,但不知道在上述情形下,要如何修改validate里的currentScene为null呢?

目前我只能重新new 一个validate的对象

8

我觉得这可能是设计上的失误。

$this->validate(['name' => 'test'], 'app\common\validate\SomeVali.somescene') //true
$this->validate(['name'=>'test'], 'app\common\validate\SomeVali') //true

$this->validate 会从缓冲中获得实例,也就是第二个的验证器其实是第一个验证器对象。第二次验证时未指定场景所以就沿用了上个验证的场景了。

重新new 一个validate的对象算是一个解决办法了。

9

本来验证操作就应该每次请求进行一次验证,如果特殊需求还是需要自己实例化,最新版本控制器基础类核心不再实现了,所以这块根据自己需求来实现吧。

9

如果官方是这么想那就简单了,每次调用时把缓存清了 不传场景就是原验证,那不就和我一开始认为的逻辑一样了么