1.1 字段校验
1.1.1 简介
开发Web应用有一个很重要的原则,就是不要相信任何输入的数据,在使用之前必须要进行有效性检查,否则很有可能会引发各种安全性问题。Yii 2当然也不会忽略这个问题,提供了校验器这一有力的工具,该工具可同时提供客户端和服务器端的数据校验。
1.1.2 使用方法
在Model内,重载rules()接口,配置每个字段的规则,如下(以LoginForm为例):
public function rules() |
每一行中,前面是字段名称,最后一个元素是规则的名称。这些规则最终是通过“校验器”来完成校验的。当然内置的校验器肯定不能够全部满足需求,因此Yii 2在根据规则名称创建校验器的时候,会首先检查该Model中是否有跟规则名称相同的函数,如果有,则校验规则的时候就直接用该函数来完成校验,譬如上面代码中的“validatePassword”规则,在LoginForm中就有接口:
public function validatePassword($attribute, $params) |
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地址 | |
exist | 判断输入的值是否在数据库中存在,常用于检查某个值在外键中是否存在 |
file | 检测输入值是否为文件 |
filter | 将输入值转换为另一个值,它实际上不是个校验器。 |
image | 检测输入值是否为图片 |
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 . '必须是一个数组');
}
}
}
使用的时候:
publicfunction rules()
{
return [
...
['kind_ids','common\helps\ArrayValidator'], // 自定义验证
...
];
}