thinkphp3.2一处相互矛盾的写法

大兄弟 2018年11月07日0   195

今天在写模型的时候用到了自动验证,其中核心代码是允许多字段同时验证的,前提是你的附加规则是callback。但是查阅代码的时候发现这个多字段验证已经和手册提到的验证规则相互矛盾了,我们看一下代码。

image.png

这是自动验证的入口方法autoValidation。其中调用过程中使用到了_validationFieldItem方法,那我们看看

image.png

这里就已经和self::VALUE_VALIDATE、self::EXISTS_VALIDATE 这两个验证条件相互矛盾了,会导致验证规则不能进入验证过程。


既然是核心出现的问题,我们当然不能对核心进行更改。我们注意到self::MUST_VALIDATE这个验证条件是不会对多字段验证进行影响的。

所以解决办法就很明显了,如果需要多字段验证并且用到callback的附加规则时,那么验证规则我们必须使用self::MUST_VALIDATE,不然缩写的规则会进不去验证过程。而在callback方法中使用$data['field']进行检测字段是否符合我们验证的条件。