Yii2异常报错提示:yii\validators

一、写在前面:

        在使用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定义上出现的问题、别去别处找。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。