Yii核心验证器api详解
本文实例讲述了Yii核心验证器api。分享给大家供大家参考,具体如下:
核心验证器CoreValidators
前言
Yii提供了一系列常用的核心validators,你可在
yii\validatorsnamespace中找到.不用使用长的验证器类名,你可以使用别名代替他们.
例如,你可以使用别名required代替yii\validators\RequiredValidator类:
<?php publicfunctionrules() { return[ [['email','password'],'required'], ]; } ?>
这个yii\validators\Validator::$builtInValidators属性生命所有支持的验证器的别名.
接下来,我们将讲解每种核心验证器的用法.
1.boolean对错值
<?php [ //检查是否"selected"是0或1,不管数据类型 ['selected','boolean'], //检查是否"deleted"是一个boolean类型,只能是true或则false ['deleted','boolean','trueValue'=>true,'falseValue'=>false,'strict'=>true], ] ?>
上面检测是否是一个bool值.
trueValue:代表true时的值.默认为'1'.
falseValue:代表false时的值.默认为'0'.
strict:是否输入框中的值必须匹配设置的trueValue和falseValue.默认为false.
注意:因为数据提交通过HTML形式都是字符创,一般你需要设置strict属性为false.
2.captcha验证码
<?php [ ['verificationCode','captcha'], ] ?>
这个验证器通常和
yii\captcha\CaptchaAction以及
yii\captcha\Captcha一起使用以确保输入的是相同的验证码通过CAPTCHA组件.
caseSensitive:是否验证码需要区分大小写.默认为false.
captchaAction:默认的验证码的CAPTCHAaction生成CAPTCHAimage的路径.默认为'site/captcha'.
skipOnEmpty:输入为空的时候是否跳过验证.默认false,即input输入是必须的.
3.compare比较
<?php [ //验证是否"password"属性和"password_repeat"是否相等 ['password','compare'], //验证age>=30 ['age','compare','compareValue'=>30,'operator'=>'>='], ] ?>
这个验证器比较指定的输入值和另一个值确保他们之间使用指定的操作符.
compareAttribute:属性的名字即将会和谁比较.当验证器被用来验证一个属性的时候,他会和属性名字相同但带有后缀_repeat的属性相比较.例如,如果要验证的属性名是password,那么默认对比的属性名就是password_repeat你可以指定你想要的值.
compareValue:一个和输入值比较的常量值.当property和compareAttribute属性被同时指定的时候,这个值将优先.
operator:比较的操作符.默认是==,即输入值和compareAttribute或compareValue值相等的时候才会成功.
支持下面这些操作符:==、===、!=、!==、>、>=、<、<=。
4.date日期
<?php [ [['from_date','to_date'],'date'], ] ?>
这个验证器检查输入的值是一个日期date,时间time或者datetime以一个合适的形式.可选的,他能转换输入值成为一个UNIX时间戳存储在一个通过timestampAttribute指定的属性里.
format:这个date/time是http://php.net/manual/en/datetime.createfromformat.php中声明的所有支持的格式
如果这个值没有设置,他会自动取值Yii::$app->formatter->dateFormat.
timestampAttribute:属性名用来存储转换将输入的日期或时间.也可以是相同的属性名作为被验证过的.如果是这种情况,原始的值将会被时间戳重写.你可以看看"如何处理日期选择器DatePicker"用例子.
http://www.yiiframework.com/doc-2.0/widget-jui#datepicker-date-input
如果输入的是可选的,你也可能要添加一个默认值滤波器除了日期验证,以确保空输入存储为NULL。否则你可能最终得到的日期像日期选择器的输入字段在0000-00-00或您的数据库1970-01-01.
<?php [ [['from_date','to_date'],'default','value'=>null], [['from_date','to_date'],'date'], ], ?>
5.default默认值
<?php [ //设置"age"为null如果他是空的 ['age','default','value'=>null], //设置"country"为"USA"如果他是空的 ['country','default','value'=>'USA'], //分配"from"和"to"分别加3天和6天,如果他们是空的话 [['from','to'],'default','value'=>function($model,$attribute){ returndate('Y-m-d',strtotime($attribute==='to'?'+3days':'+6days')); }], ] ?>
这个验证器不验证数据.当他们为空的时候.分配给属性值。
value:表单的默认值函数原型如下,
<?php functionfoo($model,$attribute){ //...组装$value... return$value; } ?>
6.double浮点值
<?php [ //检查"salary"是一个double数字 ['salary','double'], ] ?>
相当于一个数字验证器:
max:数字上限,没设置不检查
min:数字下线,没设置不检查
7.email邮箱验证
<?php [ //检查邮箱是一个有效的"email"地址 ['email','email'], ] ?>
allowName:检查名字是否允许在邮箱中出现(e.g.JohnSmith<john.smith@example.com>).默认为false.
checkDNS,是否检查电子邮件的域名是否存在,是否有任何一个A或MX记录。请注意,这可能检查由于临时DNS问题失败,即使电子邮件地址实际上是有效的。默认为false。
enableIDN,验证过程是否应考虑到IDN(国际化域名)。默认为false。需要注意的是,为了使用IDN验证您必须安装并启用国际PHP扩展,或异常将被抛出。
8.exist是否存在
<?php [ //a1需要在属性列中存在"a1"这个好像默认就有啊 ['a1','exist'], //a1存在,但它的值将使用A2来检查是否存在 ['a1','exist','targetAttribute'=>'a2'], //a1和a2需要同时存在,他们都将接收错误信息 [['a1','a2'],'exist','targetAttribute'=>['a1','a2']], //a1和a2需要同时存在,只有a1将接收错误信息 ['a1','exist','targetAttribute'=>['a1','a2']], //a1需要存在通过检测a2和a3(用a1的值) ['a1','exist','targetAttribute'=>['a2','a1'=>'a3']], //a1需要存在.如果a1是一个数组,那么每个元素都必须存在. ['a1','exist','allowArray'=>true], ] ?>
这个验证器检查输入的值能否被找到在在对应的表的列值里,他只会在ActiveRecordmodel模型的属性里起作用.
他支持验证单列或多列
targetClass:用来寻找输入值验证的ActiveRecord类名.如果未设置,默认使用当前设置的模型类.
targetAttribute:应该用于验证输入值的存在在targetClass的属性的名称。如果没有设置,将使用目前正在验证的属性的名称。可以使用阵列来验证多列的存在的同时。数组的值是将被用于验证存在的属性,而数组键是其值要验证的属性。如果键和值都是一样的,你可以指定值.
filter:additionalfiltertobeappliedtotheDBqueryusedtochecktheexistenceoftheinputvalue.Thiscanbeastringoranarrayrepresentingtheadditionalquerycondition(refertoyii\db\Query::where()ontheformatofquerycondition),orananonymousfunctionwiththesignaturefunction($query),where$queryistheQueryobjectthatyoucanmodifyinthefunction.
allowArray:是否允许输入的值是一个array.默认false.若果属性是true而且输入是一个array,那么熟这里的每一个元素都必须存在在指向的目标列里.注意这个属性不能被设置成true如果你设置验证多列通过设置targetAttribute为一个array.
9.file文件验证
<?php [ //检查"primaryImage"上传的文件格式是PNG,JPG或者GIF //thefilesizemustbelessthan1MB ['primaryImage','file','extensions'=>['png','jpg','gif'],'maxSize'=>1024*1024], ] ?>
检查是否是一个有效的上传文件。
extensions:允许上传的文件类型列表.他可以是一个数组或者是一个以逗号分割的字符串(如."gif,jpg").扩展名不区分大小写,默认为null,意味着所有的文件扩展名是允许的.
mimeTypes:允许上传的文件资源的媒体类型。他可以是一个数组或者是一个以逗号或空格分割的字符串(如."image/jpeg,image/png").不区分大小写,默认为null,意味着所有的文件扩展名是允许的.
minSize:上传文件的最小字节数未设不做判断.
maxSize:上传文件的最大字节数未设不做判断.
maxFiles:最大的上传文件数默认为1,意味着只能上传单个文件对于单个文件上传框.如果大于1,那么input必须是一个array包含至多maxFiles数量的上传文件.
checkExtensionByMimeType:是否检查文件的扩展名.如果由MIME类型检查所产生的扩展不同于上传的文件扩展名,该文件将被认为是无效的。默认值为true,意思进行这样的检查。
FileValidator和yii\web\UploadedFile一起使用..
文件上传请参考:http://www.yiiframework.com/doc-2.0/guide-input-file-upload.html
10.filter过滤
<?php [ //去掉"username"和"email"输入空格跳过数组验证 [['username','email'],'filter','filter'=>'trim','skipOnArray'=>true], //验证正常"phone"输入 ['phone','filter','filter'=>function($value){ //验证正确性手机代码 return$value; }], ] ?>
这个验证器验证不了数据.相反的,itappliesafilterontheinputvalueandassignsitbacktotheattributebeingvalidated.
filter:一个php回调函数定义一个filter.他可能是一个全局函数的名字,一个匿名函数等等.函数的原型一定是<?phpfunction($value){return$newValue;} ?>这个属性必须设置.
skipOnArray:当输入只是一个数组的时候是否跳过.默认是false.请注意,如果过滤器无法处理数组输入,您应该将此属性设置为true。否则,可能会发生一些PHP错误.
小提示:去空格直接用trim验证.
小提示:部分封装可以直接使用系统函数如intval:
<?php ['property','filter','filter'=>'boolval'], ['property','filter','filter'=>'intval'], ?>
11.image图片
<?php [ //检查"primaryImage"是否是一个有效的图片且大小合适 ['primaryImage','image','extensions'=>'png,jpg', 'minWidth'=>100,'maxWidth'=>1000, 'minHeight'=>100,'maxHeight'=>1000, ], ] ?>
文件验证器的扩展:
minWidth:最小的宽度不设无限制.
maxWidth:最大的宽度不设无限制.
minHeight:最小的高度不设无限制.
maxHeight:最大的高度不设无限制.
12.in在那一个数组里面的值
<?php [ //检查"level"是1,2或3 ['level','in','range'=>[1,2,3]], ] ?>
检查输入的值是否存在于给定的系列值的列表中.
range:给定范围值的列表.
strict:输入值和给定值之间的比较结果是否应严格(的类型和值必须相同)。默认为false。
not:验证结果是否应该被反转。默认为false。当此属性设置为true,验证检查,输入的值不能是给定列表的值中.
allowArray:是否允许输入值是一个数组。如果这是真的,并输入值是一个数组,数组中的每个元素必须值的给定列表中找到,或验证会失败。
13.integer整型验证
<?php [ //检查"age"是一个整型值 ['age','integer'], ] ?>
max:上限不设不检查.
min:下限不设不检查..
14.match正则匹配检查
<?php [ //检查"username"以字母开头,并且只包含文字字符 ['username','match','pattern'=>'/^[a-z]\w*$/i'] ] ?>
输入值指定的正则表达式匹配验证检查.
pattern:输入值必须匹配的规则.属性必须设置,否则将会抛出异常.
not:是否反转验证结果.默认false.
15.number数字检查
<?php [ //检查"salary"是一个数字 ['salary','number'], ] ?>
相当于double验证器.
max:上限不设不检查.
min:下限不设不检查.
16.required 是否为空检查
<?php [ //检查"username"和"password"不是空的 [['username','password'],'required'], ] ?>
该验证器阻止用户提交空的表单数据.
requiredValue:应该输入的值.如果未设意味着输入值不应该为空.
strict:验证一个值时是否应该检查数据类型.默认false.当requiredValue未设置时,如果这个属性是true,验证器会检查输入值不严格null;如果改属性false,验证器将使用一个松散的规则来确定一个值是空的或不.当requiredValue设置了,输入和requiredValue之间的比较也将检查数据类型,如果此属性为true。
17.safe 标记输入是安全属性
<?php [ //标记"description"是一个safe的属性 ['description','safe'], ] ?>
这个验证器不会执行数据验证.相反,它是用来标记的属性是一个安全属性(我猜作用是不会进行字符转义吧)。
18.string字符串验证
<?php [ //检查"username"是一个string而且长度在4和24之间 ['username','string','length'=>[4,24]], ] ?>
这个验证器检查输入的值是一个字符串且长度在确定的值的范围里。
length:指定待验证的字符串的长度.可以指定以下形式:
一个整数:字符串的精确长度;
单个数组元素:输入的最小长度(e.g.[8]).必须超过或等于这个数
两个数组元素:输入的最小长度和最大长度(e.g.[8,128]).
min:输入字符串的最小长度未设不限制.
max:输入字符串的最大长度未设不限制..
encoding:输入字符串的编码未设默认UTF-8.
19.trim去空格
<?php [ //去掉"username"和"email"两边的空格 [['username','email'],'trim'], ] ?>
不进行数据验证只进行去空格如果属性是一个数组将会自动忽略此过滤.
20.unique唯一性验证
<?php [ //a1需要是在由“a1”属性表示的列中的唯一 ['a1','unique'], //a1必须是唯一的,但列a2将用于检查的a1值的唯一性 ['a1','unique','targetAttribute'=>'a2'], //a1和a2的需要是唯一的,并且它们都将收到错误消息 [['a1','a2'],'unique','targetAttribute'=>['a1','a2']], //a1和a2的需要是唯一的,只有a1将收到错误消息 ['a1','unique','targetAttribute'=>['a1','a2']], //a1需要通过检查的两个a2和a3的唯一性(使用a1的值)是唯一的 ['a1','unique','targetAttribute'=>['a2','a1'=>'a3']], ] ?>
这验证检查,如果输入的值是表列中的唯一。它仅适用于活动记录模型的属性。它支持验证对任何单个列或多个列。
targetClass:应该是被用于验证查找输入值的活动记录类的名字。如果没有设置,将要使用的类目前正在验证该模型的.
targetAttribute:应该用来验证输入值的唯一性在targetClass的属性的名称。如果没有设置,将使用目前正在验证的属性的名称。可以使用阵列来验证多列的唯一性的同时。数组的值是将被用于验证唯一性的属性,而数组键是其值要验证的属性。如果键和值都是一样的,你可以指定的值。
filter:a额外的过滤器被应用到用于检查输入值的唯一性的数据库查询。这可以是一个字符串或代表附加查询条件的数组(参考yii\db\Query::where()查询条件的格式),或者是一个匿名函数像:function($query),其中$query是你可以在函数修改查询对象。
http://www.yiiframework.com/doc-2.0/yii-db-query.html#where()-detail
21.url地址验证
<?php [ //检查"website"是一个有效的URL.前置"http://"到"website"属性 //如果它不具有一个URI模式 ['website','url','defaultScheme'=>'http'], ] ?>
validSchemes:一个数组指定URI方案应被认为有效。默认为['HTTP','HTTPS'],意思是HTTP和HTTPSURL被认为是有效的。
defaultScheme:默认URI方案要预先考虑到输入,如果它不具有方案的一部分。默认为null,意味着不修改输入值。
enableIDN:验证是否应考虑到IDN(国际化域名)。默认为false。需要注意的是,为了使用IDN验证您必须安装并启用国际PHP扩展,否则异常将会被抛出。
更多关于Yii相关内容感兴趣的读者可查看本站专题:《Yii框架入门及常用技巧总结》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。