Yii2.0 探究七 异常报错提示:yii\validators

本文主要探讨在使用Yii2.0框架时遇到的异常问题,特别是`yiiaseUnknownPropertyException`。在编写代码时,如未声明表单字段,可能会引发此类错误。通过分析`yiivalidatorsRangeValidator::value`,作者分享了在模型操作中90%的错误来源于规则定义错误,并建议了解如ForbiddenException、HttpException等基本异常类型,以便更好地调试和解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、写在前面:

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









评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值