yii模型规则的简单使用以及开启前端的验证(七)

以前博客里有过一次小物件的使用,不错没有结合model验证,今天就结合model来作一下前台表单的验证吧,带你先简单的了解下model里的一些方法,详细的等我研究深了再来写过来哈。php

1.首先,model的生成的话 ,使用 gii生成就能够了,至于gii的使用,在以前已经提过了,能够往前翻一下,输入表名做为model名就能够了。前端

我想说下里面的几个方法是作什么用的。正则表达式

public static function model($className=__CLASS__)
    {
        return parent::model($className);
    }

这个就不详细说了,直接略过,毕竟是自动生成的,你也不用作任何修改,其实就是集成父类model数据库

public function tableName()
    {
        return '{{user}}';
    }

这个的做用就是返回表名  里面的user 表明的就是user表了。浏览器

 

    public function search()
    {
        // Warning: Please modify the following code to remove attributes that
        // should not be searched.

        $criteria=new CDbCriteria;
        $criteria->compare('username',$this->username);$criteria->compare('userpwd',$this->userpwd,true);
       return new CActiveDataProvider($this, array(
            'criteria'=>$criteria,
        ));
    }

上面方法是设置查询字段,须要哪一个数据库字段做为数据库查询条件,就把他按照格式写出来就能够了app

public function rules()
    {
        // NOTE: you should only define rules for those attributes that
        // will receive user inputs.
        return array(
            array('username, userpwd', 'required','message'=>'用户名,密码必填'),                 //表明这俩字段必填
            array('price, apply_version', 'length', 'max'=>10),      //表明这俩字段的最大长度都是40
            array('end_time', 'safe'),                               //表明 正确的时间
            // The following rule is used by search().
            // Please remove those attributes that should not be searched.
            array('username, userpwd,', 'safe', 'on'=>'search'),      //表明username,userpwd 能够做为查询条件
        );
    }

上面这个则是验证规则,验证字段是否符合系统须要的条件,就好像前端的js的效果同样的,其实yii的验证组件不少不少,一会我放到文章的后面 给你们都列出来把。yii

public function attributeLabels()
    {
        return array(
            'password' => '原密码',
            'password1' => '新密码',
            'password2' => '确认新密码',
            
        );
    }

这个是对字段进行重命名,重命名的字段能够经过小物件的形式显示在前台中,须要注意的是有一种状况就是,可能有的字段他在数据库表中是不存在的,好比说password1,password2这样的字段,通常人是不会存在数据库的,因此要建立个模拟的字段,怎么建立呢,在model上方定义一下就能够了,如图:ide

 

看到了把 如上图所示,数据库表里没有的字段都须要定义一下,按照我图片里那样的来就能够了哦,既然说到这里,我就接着说 怎么样结合view,controller把rules里的判断和attributesLabeles里定义好的标签名显示出来,而且能判断输入的数据是否符合格式呢,来先从 controller开始ui

上面这是对应的controller,我想你应该会建把 而后 方法叫actionPasswdthis

$userModel = User::model(); //引入你的model

而后判断model是否存在

而后$userModel->arributes=$_POST['User'];//接收前台传来的全部值

$userModel->validate();  //执行model的数据验证

有了 这个最后别忘记 view里的小物件,我估计你会写了已经 ,我给你截个图 你参考下吧

LabelEx就是输出model里对应的标签值

关于labelEx里的参数第一个是模型名,第二个是对应的字段名 ,就是你在arributesLabels里定义的名字。

-----------------------------------------------------------------------------------------------------------------------------------------------------

再说2个很是经常使用的把 就是大家必定会用到的,一个是好比登陆注册或者修改密码这,把错误信息输出,对吧,怎么把错误信息输出到页面呢

就是利用model里的rules规则里的message了,若是不符合规则,则会将message显示到页面中了,view中怎么显示呢 ,这么显示

<?php echo $form->error(UserModel,'username')?>这样就能够将rules里的规则 用到用户名那了,其余的字段以此类推哦,都是 model配置对应字段的message,前台根据model里对应的字段名 在前台进行输出。

 

 

还有个常见的就是判断2次输入的密码是否相同 这个再每一个系统里基本都有,怎么验证呢 ,view里不变 引入error就行,

model须要动一下 ,这么写

写到rules里仍是 意思是 password2 和 password1 相比较必须相同,不然message提示 确认密码必须一致。

 

最后再说个 自定义的model

好比说判断原密码 是否正确,这个就要走数据库了,这里就要用到自定义方法了

在model里仍是写在rules方法里

array('username',check_pwd);

而后下面就写个check_pwd方法被

public function check_pwd(){

$userInfo=$this->find('username=:name',array(':name'=>Yii::app()->user->name))  //通常修改密码都是登陆后修改因此这里的name指的是当前登陆用户的用户名,根据用户名查询当前用户的密码是多少。

  if  ($this->password!=$userInfo->password){          $this->password就是用户输入的原密码了      $userinfo->password就是数据库查出来得当前用户的密码了,一判断 完事

$this->addError('password','原密码错误');

}   

}

 

最后 我把 yii 的model 里的rules一些规则附上,大家遇到相对应的验证 直接拿来用下:

规则列表
 in: 确保数据在一个预先指定的值的范围以内。
lengths 确保数据的长度在一个指定的范围以内。
match: 确保数据能够匹配一个正则表达式。
numerical: 确保数据是一个有效的数字。
required: 确保特性不为空。
 type: 确保特性是指定的数据类型。
 unique: 确保数据在数据表的列中是惟一的。
 url: 确保数据是一个有效的 URL。
boolean: 确保特性有一个布尔值。
captcha: 确保特性值等于 CAPTCHA 中显示的验证码。
compare: 确保特性等于另外一个特性或常量。
email: 确保特性是一个有效的Email地址。
default: 指定特性的默认值。
exist: 确保特性值能够在指定表的列中能够找到。
file: 确保特性含有一个上传文件的名字。
filter : 经过一个过滤器改变此特性。

这些要牢记哦 !

额 最后再多嘴一句哈,刚才的model验证每次都要刷新才能够的,你能够每次提交表单的时候试一下,看下验证为空或者 是否原密码一致这些验证以前,浏览器是否刷新了,确定是刷新了,怎么让他不刷新了,来吧 ,在view里的小物件里改下 ,在form开始的地方改下,改为这样:

 <?php $form=$this->beginWidget('CActiveForm', array(
 'id'=>'contact-form',
 'enableClientValidation'=>true,
 'clientOptions'=>array(
 'validateOnSubmit'=>true,
 ),
 )); ?>

切记开启前端js不刷新页面验证的时候,要保证controller用render否则没法引入组件相关的js库

相关文章
相关标签/搜索