温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Yii 2 —— 字段校验

发布时间:2020-04-23 06:05:28 来源:网络 阅读:2598 作者:tywali 栏目:开发技术

1.1  字段校验

1.1.1  简介

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

1.1.2  使用方法

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

public function rules()
 {
    
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 function validatePassword($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

标志输入的字段是否可信,YiiModel的每个字段都要求必须要有校验器,但是有时候有些字段的确不需要,譬如主键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'], // 自定义验证

        ...

    ];

}

 


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI