Yii2——字段校验-创新互联

1.1  字段校验

1.1.1  简介

开发Web应用有一个很重要的原则,就是不要相信任何输入的数据,在使用之前必须要进行有效性检查,否则很有可能会引发各种安全性问题。Yii 2当然也不会忽略这个问题,提供了校验器这一有力的工具,该工具可同时提供客户端和服务器端的数据校验。

创新互联公司长期为近1000家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为卢龙企业提供专业的网站制作、成都网站建设,卢龙网站改版等技术服务。拥有10年丰富建站经验和众多成功案例,为您定制开发。

1.1.2  使用方法

在Model内,重载rules()接口,配置每个字段的规则,如下(以LoginForm为例):

public functionrules()
 {
    return[
         // username and password are both required
         [['username', 'password'], 'required'],
         // rememberMe must be a boolean value
         ['rememberMe', 'boolean'],
         // password is validated by validatePassword()
         ['password', 'validatePassword'],
     ];
 }

每一行中,前面是字段名称,最后一个元素是规则的名称。这些规则最终是通过“校验器”来完成校验的。当然内置的校验器肯定不能够全部满足需求,因此Yii 2在根据规则名称创建校验器的时候,会首先检查该Model中是否有跟规则名称相同的函数,如果有,则校验规则的时候就直接用该函数来完成校验,譬如上面代码中的“validatePassword”规则,在LoginForm中就有接口:

public functionvalidatePassword($attribute, $params)
 {
    if(!$this->hasErrors()) {
         $user = $this->getUser();
        if(!$user || !$user->validatePassword($this->password)) {
             $this->addError($attribute, '账号或密码输入错误。');
         }
     }
 }

1.1.3  内置校验器

Yii 2中,校验器存放于vendor\yiisoft\yii2\validators目录下,有如下内置校验器(这些校验器没有全部都用过,这里列出来功能,细节待用到的时候再研究):

boolean

检测输入值是否为boolean类型

captcha

检测输入的校验码是否正确,这个需要与yii\captcha\CaptchaAction一起使用

compare

与指定值进行比较,确认两者是否符合比较条件(如:>=、=、<=),譬如注册时会要求输入两次密码,要比较这两次输入的密码是否相同

date

检测输入值是否为date类型

datetime

检测输入值是否为datetime类型

time

检测输入值是否为time类型

default

这个实际上不是一个校验器,是当某个属性为空时,提供默认值用的

double

检测输入值是否为double类型

each

对输入的一组数据进行校验

email

检测输入值是否为email地址

exist

判断输入的值是否在数据库中存在,常用于检查某个值在外键中是否存在

file

检测输入值是否为文件

filter

将输入值转换为另一个值,它实际上不是个校验器。

p_w_picpath

检测输入值是否为图片

in

检测输入值是否在指定的列表中

integer

检测输入值是否为integer类型

match

使用正则表达式检查输入值

required

检测输入值是否为空

safe

标志输入的字段是否可信,Yii对Model的每个字段都要求必须要有校验器,但是有时候有些字段的确不需要,譬如主键ID。

string

检测输入值是否为string类型

trim

这实际上是一个转换器,去除掉输入的前后空格

unique

检测输入值在表中是否唯一

url

检测输入值是否为URL

ip

检测输入值是否为IP地址

1.1.4  自定义校验器

参考文献:

1、http://www.cnblogs.com/yhdsir/p/5181938.html

新建一个文件:

?php

namespace common\helps;

use yii\validators\Validator;

class ArrayValidator extends Validator

{

   publicfunction validateAttribute($model, $attribute)

   {

       if (!is_array($model->$attribute)) {

           $this->addError($model, $attribute, $attribute . '必须是一个数组');

       }

   }

}

                           Yii 2 —— 字段校验

使用的时候:

Yii 2 —— 字段校验

publicfunction rules()

{

   return [

       ...

       ['kind_ids','common\helps\ArrayValidator'], // 自定义验证

       ...

   ];

}

创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。


网站栏目:Yii2——字段校验-创新互联
转载注明:http://ybzwz.com/article/cecido.html