inhere / php-validate

Lightweight and feature-rich PHP validation and filtering library. Support scene grouping, pre-filtering, array checking, custom validators, custom messages. 轻量且功能丰富的PHP验证、过滤库。支持场景分组,前置过滤,数组检查,自定义验证器,自定义消息。
https://inhere.github.io/php-validate/
MIT License
257 stars 33 forks source link

swoft使用验证,只能验证一次?变量没有被释放的问题 #7

Closed phper666 closed 5 years ago

phper666 commented 5 years ago

在php-validate/src/ValidationTrait.php 的161、265行代码有点问题,貌似变量未被释放,下次再来验证直接返回了。 场景: 我用postman来请求某个更新数据的接口,采用了方法3的方式进行验证。返回了缺少某个参数的错误,后面我修改了携带的参数,参数已经是完全正确的了,但是还是返回了相同的错误。追踪代码,发现在ValidationTrait.php 161行代码直接返回对象,不进行验证了。也就是$this->_validated为true了。这个如何解决呢?

inhere commented 5 years ago

你是使用在一个单例对象里吗?

phper666 commented 5 years ago

GroupController.php: image image

SaAuthGroupLogic.php: image

phper666 commented 5 years ago

应该是单例对象

phper666 commented 5 years ago

我知道了,swoft使用注解获取对象是单例。所以$this->_validated修改后,一直保留该值。单例后无法重置验证吗?是否能每次都能重新验证

inhere commented 5 years ago

你通过什么方式重新载入数据的

phper666 commented 5 years ago

BaseActiveRecord.php image image image

inhere commented 5 years ago

我里面有个 resetValidation() 方法,可以开放出来,你每次 setData 时,都调用一下它。

https://github.com/inhere/php-validate/blob/master/src/ValidationTrait.php#L394-L404

phper666 commented 5 years ago

OK

inhere commented 5 years ago

@phper666 😯看差了,哈哈 你用的是 trait 呀,可以直接调用 resetValidation 的

    public function setData(array $data) 
    {
        $this->data = $data;
        $this->resetValidation();
    }
phper666 commented 5 years ago

嗯嗯,已经解决,感谢