Yii2.0 探究七 异常报错提示:yiivalidators

    xiaoxiao2021-12-14  18

    一、写在前面:

            在使用yii2.0的过程中,在编写代码时候难免出现错误,或者说是异常;

           有时候我们可以看出来,例如:table_name 不存在;这在我们编写form的model时候非常常见,原因在于你的字段没有声明,比如表单中的重复密码的字段,验证码字段;都要在model的里面声明属性:public $repassword;public $verfiCode都要声明,不然会报表不存在的异常;

          有时候第一次可能我们看不出来:这就是我所经历的,大部分出现在操作model的时候,或者是创建,或者是更新的时候,然后总结出的经验是在操作model的时候,90%的错误都出现在rule的字段编写上,或者是字段写错误。或者是规则声明错误;

         我们以yii\validators\...这个类展开;

    二、怎么查看错误:

        相对来说,yii框架的提示还是比较完整,准确的,我们应该去了解下基本的异常;比如ForbiddenException;HttpException等等;

        1.首要的当然是看标题:比如:

    Unknown Property – yii\base\UnknownPropertyException;

    Setting unknown property: yii\validators\RangeValidator::value;

    第一行就很明显了,就是问题出现在字段上,不知道这个属性;当然这个范围很大了;第二行中的yii\validators就表明:验证出现问题,就是rules的问题,接下来你的重点就要放在rule字段的规则定义上了;     2.我们再看里面的详细内容,从下向上,果然我们发现了蛛丝马迹,错误就出现在我定义用户的状态时候,本来是status  range是一个变化的范围,而我却写成value了。

    三、yii\validator相关:

          1.场景:我新建修改管理员信息的form时候,需要去更新其中的管理员信息;如下: if(!$this->validate()){ return null; } $user = AdminUser::findOne(\Yii::$app->user->identity->id); $user->username = $this->username; $user->email = $this->email; $user->password_hash = \Yii::$app->security->generatePasswordHash($this->password); $user->brief = $this->brief; return $user->save() ? $user : null;  结果实验了N次,validate竟然是通过的;当时蒙逼的我静静的看着代码但问题是更新就不成功;爆出了上面所写的错误;明明是validators啊。。我分析了半天,既然这个model里面没问题,那么就是它的父级model的字段验证出现了问题,导致数据更新失败;user里面的rule只有一条: public function rules() { return [ ['status','default','value'=>self::STATUS_ACTIVE], ['status','in','value'=>[self::STATUS_LOCK,self::STATUS_ACTIVE]], ]; }没错,就是这样,我才发现了in是在一个范围;应该是range;粗心导致bug的出现,      2.yii\validators\..::....格式的错误;     这样的异常一般都是rule字段验证错误所爆出的异常;        类似的在vender\yiisoft\yii\validators\下面有着定义,去验证字段符合规则:    BoleanValidator.php  是对  字段的验证 ['字段名', 'boolean', 'trueValue' => true, 'falseValue' => false, 'strict' => true];    CompareValidator.php 是对比较字段的验证 ['字段名','compare','另一字段',compareValue=>20    EmailValidator.php 是对字段email格式的验证 ['字段名', 'email'] ..........详细了解的可自行查看源码:

    四、总结:

      程序抛出:yii\validator\.........,都是字段role定义上出现的问题、别去别处找。

    转载请注明原文地址: https://ju.6miu.com/read-972110.html

    最新回复(0)