Yii 2 —— 字段校验
开发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, '账号或密码输入错误。');
}
}
}
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
将输入值转换为另一个值,它实际上不是个校验器。
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 . '必须是一个数组');
}
}
}
使用的时候:
publicfunction rules()
{
return [
...
['kind_ids','common\helps\ArrayValidator'], // 自定义验证
...
];
}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。