新葡亰496net 新葡亰编程 yii用户注册表单验证实例_php实例_脚本之家

yii用户注册表单验证实例_php实例_脚本之家



本文实例讲述了yii用户注册表单验证实现方法。分享给大家供大家参考,具体如下:

过滤器

一、写在前面:

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

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

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

     我们以yiivalidators…这个类展开;

视图层:register.php

什么是过滤器

过滤器是控制器动作执行之前或之后需要执行的代码。该代码以对象的形式执行,则应该使用类的方式定义并申明。
过滤器本质上是一种特殊的行为。

二、怎么查看错误:

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

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

beginWidget;?>labelEx;?>textField;?>error;?>
labelEx;?>passwordField;?>error;?>
labelEx;?>passwordField;?>error;?>
labelEx;?>textField;?>error;?>
labelEx;?>radioButtonList($model,'sex',array,array;?>
labelEx;?>dropDownList($model,'grade',array(0=>"--请选择--",1=>"2010级",2=>"2011级",3=>"2012级"));?>error;?>
labelEx;?>checkBoxList($model,'hobby',array(1=>"篮球",2=>"足球",3=>"排球"),array;?>error;?>endWidget();?>

为什么使用过滤器

通常情况下,过滤器将代码绑定到所有的操作上,也就是说,每一个操作的执行,都需要先或后执行过滤器,所以,可以用来执行权限检测、缓存处理等事情

Unknown Property – yiibaseUnknownPropertyException;

model层的代码如下:User.php

在哪里使用过滤器

在控制器中,定义:
public function behaviors(){
}

Setting unknown property: yiivalidatorsRangeValidator::value;

第一行就很明显了,就是问题出现在字段上,不知道这个属性;当然这个范围很大了;第二行中的yiivalidators就表明:验证出现问题,就是rules的问题,接下来你的重点就要放在rule字段的规则定义上了;

   
2.我们再看里面的详细内容,从下向上,果然我们发现了蛛丝马迹,错误就出现在我定义用户的状态时候,本来是status
 range是一个变化的范围,而我却写成value了。

"姓名", "password"=>"密码", "password2"=>"确认密码", "email"=>"邮箱", "sex"=>"性别", "grade"=>"年级", "hobby"=>"爱好", ); } //验证表单域 public function rules() { return array( array("username","required","message"=>"用户名不能为空"), array("password","required","message"=>"密码不能为空"), //验证密码和确认密码 array("password2","compare","compareAttribute"=>"password","message"=>"两次密码不一致"), //验证邮箱 array("email","email","allowEmpty"=>false,"message"=>"邮箱格式不正确"), //验证年级 array("grade","in","range"=>array,"message"=>"请选择年级"), //验证爱好,使用自定义规则 array, ); } //验证爱好 function checkHobby(){ $this->hobby; $len= strlen; if{ $this->addError; } }}?>

过滤器详解

==behaviors()方法返回一个数组,类似于配置文件==
数组内的每一个元素也应该是一个数组,表示一个过滤器
如:

Public function behaviors(){
Return [
[
‘class’ => ‘实现类’,
]
];
}
表示定义了一个过滤器

三、yiivalidator相关:

     
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.yiivalidators..::….格式的错误;

    这样的异常一般都是rule字段验证错误所爆出的异常;

   

 
 类似的在venderyiisoftyiivalidators下面有着定义,去验证字段符合规则:

   BoleanValidator.php  是对  字段的验证

['字段名', 'boolean', 'trueValue' => true, 'falseValue' => false, 'strict' => true];

   CompareValidator.php 是对比较字段的验证

['字段名','compare','另一字段',compareValue=>20

   EmailValidator.php 是对字段email格式的验证

['字段名', 'email']

……….详细了解的可自行查看源码:

control层的代码如下:

过滤器的位置

Yii2为开发者定义了很多的过滤器,可以直接拿过来使用。

图片 1

过滤器位置.png

四、总结:

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

//信息添加 添加显示页面和添加处理使用同一个方法 public function actionAdd; if){// foreach ($_POST['User'] as $k =>$v){// $user->$k=$v;// } if(is_array($_POST['User']['hobby'])) $_POST['User']['hobby']= implode(",", $_POST['User']['hobby']); //print_r; $user->attributes=$_POST['User']; if{ echo 'success'; }else{ echo 'error'; } } $this->renderPartial("new",array;}

定义过滤器

在Yii2中,自定义过滤器,需要继承 yiibaseActionFilter 类并覆盖
yiibaseActionFilter::beforeAction() 和/或
yiibaseActionFilter::afterAction() 方法来创建动作的过滤器
定义在beforeAction()中的代码会在操作执行之前执行
定义在afterAction()中的代码会在操作执行之后执行

如:创建一个过滤器,记录操作执行的时间
首先应该创建一个过滤器,比如在frontend 应用中创建一个
filters目录,专门用来存储过滤器,然后创建TimeFilter.php文件过滤器通常使用Filter.php作为文件后缀,而文件中应该有一个和文件名一样的类

图片 2

过滤器位置1.png

图片 3

过滤器.png

然后覆盖基础过滤器的 beforeAction 和 afterAction

图片 4

过滤器应用.png

在beforAction中,如果返回true表示放行,操作继续执行,如果返回false,表示停止,操作不再执行。

加载过滤器

图片 5

过滤器加载.png

需要注意的问题:
==定义过滤器内的beforeAction 和 afterAction ,必须返回父类的方法。
Return parent::beforeAction($action)==

其中,表单的自动验证,在model层实现,表单元素的名称与数据库中的字段名字一致,可设置错误信息进行提示。

错误处理

  1. 凡是非致命错误都以异常的形式抛出,是可以捕获的
  2. 错误处理器是以组件的形式配置在main中的
  3. 错误响应的格式是可以选择的,有ajax或者html或者纯文本
  4. 响应错误的方法是可以自己定义的
    错误组件的实质类是yiiwebErrorHandle其他的配置参数可以去该类中查看public属性

希望本文所述对大家基于yii框架的PHP程序设计有所帮助。

Session的使用

图片 6

Session使用.png

标签:

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图