阿江 2017-10-04 20:15:40 4691次浏览 0条回复 9 1 0

说明

学习Yii Framework 2易2框架的过程是漫长的也是充满乐趣的以下是我学习Yii2框架时对官网英文资料(请参见原文网址)的翻译和代码实现提供了较完整的代码供你参考不妥之处请多多指正

原文网址:

http://www.yiiframework.com/doc-2.0/guide-tutorial-core-validators.html

本文主题:核心验证器(Core Validators)

Core Validators(核心验证器,共23个):

boolean
captcha
compare
date
default
double
each
email
exist
file
filter
image
ip
in
integer
match
number
required
safe
string
trim
unique
url
查看Yii2的核心验证器:
	$aa=\yii\validators\Validator::$builtInValidators;
	var_dump($aa);
测试结果:
/*
array (size=25)
  'boolean' => string 'yii\validators\BooleanValidator' (length=31)
  'captcha' => string 'yii\captcha\CaptchaValidator' (length=28)
  'compare' => string 'yii\validators\CompareValidator' (length=31)
  'date' => string 'yii\validators\DateValidator' (length=28)
  'datetime' => 
    array (size=2)
      'class' => string 'yii\validators\DateValidator' (length=28)
      'type' => string 'datetime' (length=8)
  'time' => 
    array (size=2)
      'class' => string 'yii\validators\DateValidator' (length=28)
      'type' => string 'time' (length=4)
  'default' => string 'yii\validators\DefaultValueValidator' (length=36)
  'double' => string 'yii\validators\NumberValidator' (length=30)
  'each' => string 'yii\validators\EachValidator' (length=28)
  'email' => string 'yii\validators\EmailValidator' (length=29)
  'exist' => string 'yii\validators\ExistValidator' (length=29)
  'file' => string 'yii\validators\FileValidator' (length=28)
  'filter' => string 'yii\validators\FilterValidator' (length=30)
  'image' => string 'yii\validators\ImageValidator' (length=29)
  'in' => string 'yii\validators\RangeValidator' (length=29)
  'integer' => 
    array (size=2)
      'class' => string 'yii\validators\NumberValidator' (length=30)
      'integerOnly' => boolean true
  'match' => string 'yii\validators\RegularExpressionValidator' (length=41)
  'number' => string 'yii\validators\NumberValidator' (length=30)
  'required' => string 'yii\validators\RequiredValidator' (length=32)
  'safe' => string 'yii\validators\SafeValidator' (length=28)
  'string' => string 'yii\validators\StringValidator' (length=30)
  'trim' => 
    array (size=3)
      'class' => string 'yii\validators\FilterValidator' (length=30)
      'filter' => string 'trim' (length=4)
      'skipOnArray' => boolean true
  'unique' => string 'yii\validators\UniqueValidator' (length=30)
  'url' => string 'yii\validators\UrlValidator' (length=27)
  'ip' => string 'yii\validators\IpValidator' (length=26)
*/

Yii提供了一组通用的核心验证器,可以在yii\validators命名空间下找到。你可以使用这些核心验证器的别名,而无需调用长类名。例如,你可以使用yii\validators\RequiredValidator类的别名required:

public function rules(){
	return [
		[['email','password'],'required'],	
	];
}

yii\validators\Validator::$builtInValidator 属性声明了所有支持的验证器别名。 接下来,我们一起来看一下每个核心验证器的主要用法和特性。

boolean
[
	//检查"selected"是否是0或1
    ['selected', 'boolean'],
	//检测"deleted"是否是布尔型,只能是'true'或'false'
    ['deleted', 'boolean', 'trueValue' => true, 'falseValue' => false, 'strict' => true],
]

此验证器检查输入的值是否是一个布尔值。 trueValue:指定true值,默认是'1' falseValue:指定false值,默认是'0' strict:输入值是否严格匹配trueValue和falseValue,默认值是false。

注意:因为通过HTML表单提交的输入数据都是字符串类型的,所以通常应将strict属性设置为false。

//只能输入数字0或1
['selected', 'boolean'],

//在文本框'population'中输入任何内容都无效('strict' => true)
['population', 'boolean', 'trueValue' => true, 'falseValue' => false, 'strict' => true],

//只能在文本框'population' 中输入数字0或1,输入字符串'false'或'true'无效('strict' => false)
['population', 'boolean', 'trueValue' => true, 'falseValue' => false, 'strict' => false],
captcha
[
	['verificationCode', 'captcha'],
]

此验证器通常与yii\captcha\CaptchaAction和yii\captcha\Captcha一起使用,用于确保输入值与校验码组件显示的值相同。 caseSensitive:校验是否区分大小写,默认值是false captchaAction:CAPTCHA动作的路由,用于生成校验码图片,默认值是'site/captcha' skipOnEmpty:输入为空时是否忽略此项检验,默认值是false,也就是此项必填。

compare
[
	//验证"password"属性的值是否与"password_repeat"相同
    ['password', 'compare'],

	//与上句同效,指定比较对象
    ['password', 'compare', 'compareAttribute' => 'password_repeat'],

	//验证age>=30
    ['age', 'compare', 'compareValue' => 30, 'operator' => '>=', 'type' => 'number'],
]

此验证器对校验值和比较值进行比较,比较的方法由operator属性定义。 compareAttribute:要比较的属性值,另一个要比较的属性名称默认是加后缀_repeat,例如:password对应的比较属性是password_repeat。 compareValue:一个要比较的常量值,当此属性和compareAttribute都已定义时,此属性优先。 operator:比较操作符,默认值是==,也就是比较是否与compareAttribute或compareValue相等,支持的操作符如下:

	==,相等,非严格比较模式
	===,恒等,严格比较模式
	!=,不相等,非严格比较模式
	!==,恒不等,严格比较模式
	>,校验值大于比较值
	>=,校验值大于等于比较值
	<,校验值小于比较值
	<=,校验值小于等于比较值

type:缺省的比较类型是'string',即两值按字节进行比较,当比较数值时,请确定将此值设置为'number'。

比较日期类型

compare验证器仅能用于字符串和数字的比较。如果你想比较的是两个日期,分两种情况:如果要与一个固定值比较,你可以使用date验证器并定义它的$min 或 $max 属性,如果你要比较表单中的两个日期值,例如fromDate和toDate,你可以组合使用copmare和date验证器,代码如下:

['fromDate', 'date','format'=>'yyyy-mm-dd', 'timestampAttribute' => 'fromDate'],
['toDate', 'date','format'=>'yyyy-mm-dd', 'timestampAttribute' => 'toDate'],
['fromDate', 'compare', 'compareAttribute' => 'toDate', 'operator' => '<', 'enableClientValidation' => false],

验证器按照定义的顺序执行,首先会验证fromDate和toDate是有效的日期值,然后它们会被转为机器格式,随后这两个值使用compare验证器进行比较,禁用客户端的验证器仅在服务器端有效,这是因为日期验证器当前没有提供客户端验证功能,所以在compare验证器中$enableClientValidation 被设置为false。

date

date验证器有三种形式:

[
    [['from_date', 'to_date'], 'date'],
    [['from_datetime', 'to_datetime'], 'datetime'],
    [['some_time'], 'time'],
]

此验证器检测输入值是否是一个符合格式的日期、时间或日期时间,通常是把输入值转为UNIX的时间戳或其他机器可读的格式,并存储在timestampAttribute定义的属性中。 format:定义的输入值应符合的日期/时间格式,可以是ICU手册中定义的日期时间格式,也可以是"php:"开头的字符串,此格式可以由PHP的Datetime类所识别。如果此值未设置,则会使用默认值:Yii::$app->formatter->dateFormat。可以查看API文档获取更多信息: http://www.yiiframework.com/doc-2.0/yii-validators-datevalidator.html#$format-detail //PHP的Datetime类参考: http://php.net/manual/en/datetime.createfromformat.php timestampAttribute:定一个属性名称,验证器会将输入内容转为UNIX时间戳并赋值到这个属性中去,此属性名称可以和验证的属性名称相同,在这种情况下,验证完成后,会覆盖掉原值。具体应用请查看"Handling date input with the DatePicker": https://github.com/yiisoft/yii2-jui/blob/master/docs/guide/topics-date-picker.md 自2.0.4版本起,格式和时区可以使用属性 $timestampAttributeFormat 和$timestampAttributeTimeZone 来定义。 注意,当使用timestampAttribute时,输入值将被转换成UNIX时间戳,此格式由UTC定义,所以执行输入时间时区到UT的转换。 自2.0.4版本起,可以定义minimum或maximum时间戳。

除了默认项之外,你还可以为验证器添加一个默认值过滤器(default value filter),这样确保没有输入时存储的是null,否则你可能从数据库取到的是0000-00-00,或者在时间输入框中是1970-01-01。

[
	[['from_date','to_date'],'default','value'=>null],	
	[['from_date','to_date'],'date'],
]
//正确的日期格式:2010-09-08,2010-50-35(此值也能验证通过)
['toDate', 'date','format'=>'yyyy-mm-dd'],
default
[
	//如果'age'没有输入,则设置为null
    ['age', 'default', 'value' => null],

	//如果'country'没有输入,则设置为'USA'
    ['country', 'default', 'value' => 'USA'],

    // assign "from" and "to" with a date 3 days and 6 days from today, if they are empty
	//如果'from'或'to'为空,则赋值为加3天或加6天的日期
    [['from', 'to'], 'default', 'value' => function ($model, $attribute) {
        return date('Y-m-d', strtotime($attribute === 'to' ? '+3 days' : '+6 days'));
    }],
]

此验证器不执行数据验证,而是当属性为空时给赋一个缺省值。 value:缺省值或一个PHP回调函数(将返回一个缺省值),如果验证项为空时,此缺省值将会被赋给它们。PHP回调函数的形式如下:

function foo($model,$attribute){
	//计算出$value值
	return $value;	
}

信息:如何判断一个验证项为空请参考Empty Value章节://empty() http://www.yiiframework.com/doc-2.0/guide-input-validation.html#handling-empty-inputs

	//自定义判空逻辑:
	['agree', 'required', 'isEmpty' => function ($value) {
        return empty($value);
    }]

//后台使用验证器时,需要执行$model->validate()才会生效!!! 核心验证器中处理空输入的验证器:captcha, default, filter, required, trim 其他验证器的$skipOnEmpty 默认值是true(不处理空值),yii\validators\Validator::$skipOnEmpty

['age', 'default', 'value' => null],
//如果"country"为空则设置为"USA"
['country', 'default', 'value' => 'USA'],
double
[
	//检测"salary"是否是double数字
    ['salary', 'double'],
]

此验证器检测输入值是否是一个double数字,与number验证器同效。 max:可以输入的最大值(含),如果没有设置,则验证器将不检测最大值。 min:可以输入的最小值(含),如果没有设置,则验证器将不检测最小值。

['population', 'double','min'=>10,'max'=>1500],
each

信息:此验证器自2.0.4版本起有效。

[
    // checks if every category ID is an integer
	//检测每一个分类ID(categoryIDs)都是一个整数
    ['categoryIDs', 'each', 'rule' => ['integer']],
]

此验证器仅适用于数据属性,它验证数组的每一个元素都符合验证规则,在上例中,categoryIDs属性属性是一个数组,它的每个元素将由一个整数验证规则进行验证。 rule:一个验证规则,是一个数组。数组中的第一个元素定义验证器的类名或别名,其他的键值对将用于配置验证器对象。 allowMessageFromRule:是否使用验证规则返回的错误信。默认值是true,如果为false,将使用message作为错误信息。

注意:如果属性数据不是数组,将验证失败,且message信息将被作为错误信息返回。

//数组
<?=$form->field($model, 'hobby')->checkboxList(['0'=>'篮球','1'=>'足球','2'=>'羽毛球','3'=>'乒乓球']) ?>
<?
['hobby', 'each', 'rule' => ['integer']],
email
[
	//检测"mail"是否是有效的邮件地址
    ['mail', 'email'],
]

此验证器检测输入值是否是一个有效的email地址。 allowName,是否允许在email地址中添加姓名(如:John Smithjohn.smith@example.com),默认值为false。 checkDNS,是否检测email的域名是否存在A或MX记录,当email是有效邮箱时,此项检测可能会因为DNS的临时问题而导致失败。默认值为false。 enableIDN,检测过程是否考虑IDN(Internationalized Domain Names)账号,默认值是false。注意:要使用IDN验证必须安装intl的PHP扩展,否则将抛出一个异常。

exist
[
	//a1输入项的值存在于"a1"字段记录中,则验证通过
    ['a1', 'exist'],

	//表单a1值存在于"a2"字段记录中则验证通过
    ['a1', 'exist', 'targetAttribute' => 'a2'],

	//a1列和a2列的组合值存在(即同一条记录的a1和a2组合后与输入值相等)则验证通过,值是从a1和a2输入项取得,两个输入项都会显示错误信息
    [['a1', 'a2'], 'exist', 'targetAttribute' => ['a1', 'a2']],

	//a1列和a2列的组合值存在则验证通过,值是从a1和a2输入项取得,仅输入项a1会显示错误信息
    ['a1', 'exist', 'targetAttribute' => ['a1', 'a2']],

	//a1列和a3列的组合值存在则验证通过,值是从a2和a1输入项取得,仅输入项a1会显示错误信息
    ['a1', 'exist', 'targetAttribute' => ['a2', 'a1' => 'a3']],

	//a1表单值应存在,如果a1是一个数组,则它的每一个元素都应该存在
    ['a1', 'exist', 'allowArray' => true],
]

exist验证器检查输入值是存在于一个表列中,此表列的字段由Active Record属性来定义。你可以使用targetAttribute定义AR属性,targetClass指定AR类。如果你没有定义它们,将使用当前属性和模型类。 你可以使用此验证器检测单列或多列(即组合的多列属性值是否存在)。 targetClass:AR(Active Record)类名称,将在此类对应的表中查找验证项,如果没有设置,当前模型类将被用于验证。 targetAttribute:targetClass中的字段名称,将被用于验证输入值是否存在,如果没有设置,将使用表单元素同名的字段,你可以使用一个数据来验证多列字段,数组值是将要被验证的表单值,数组键是表字段名。如果键名和键值相同,你只需定义值即可。 filter:添加数据库查询的附加过滤器检查输入值是存在的,可以是一个字符串或一个表示查询条件的数组(格式请参考yii\db\Query::where()),或者是一个匿名函数形式如function($query),$query 是一个Query对象,在函数中可以修改它。 allowArray:是否允许一个输入值是数组,默认值是false,如果此属性是true且输入值是一个数组,则数组的每一个元素必须在表字段中存在,如果你设置targetAttribute为数组,即多列检测时,allowArray将不能被设置为true。

//对'name'列(数据表中的字段)进行值存在验证,值从'name'输入项取得,存在则验证通过
['name', 'exist'],
//对'code'列进行值存在验证,值从'name'输入项取得,存在则验证通过
['name', 'exist','targetAttribute'=>'code'],
//对'code'列和'name'列组合值进行存在验证,值从'code''name'输入项对应取得,存在则验证通过,错误信息两个输入项都会显示
[['name','code'], 'exist','targetAttribute'=>['code','name']],
//对'code'列和'name'列组合值进行存在验证,值从'code''name'输入项对应取得,存在则验证通过,错误信息仅在name输入项显示
['name', 'exist','targetAttribute'=>['code','name']],
//对'code'列和'name'列组合值进行存在验证,值从'code''continent'输入项对应取得,存在则验证通过,错误信息仅在continent输入项显示
['continent', 'exist','targetAttribute'=>['code','continent'=>'name']],
file
[
	//检查上传图片文件primaryImage类型是 PNG, JPG or GIF之一,文件尺寸必须小于1M。
    ['primaryImage', 'file', 'extensions' => ['png', 'jpg', 'gif'], 'maxSize' => 1024*1024],
]

此验证器检查输入项是一个有效的上传文件。 extensions:允许上传的文件扩展名列表,可以是由扩展名组成的一个数组或由逗号间隔的一个字符串(如"gif,jpg")。扩展名不区分大小写。默认值是null,允许所有文件扩展名。 mimeTypes:允许上传的文件MIME类型列表,可以是由MIME类型组成的一个数组或由逗号间隔的字条串(如"image/jpeg,image/png"),可以使用通配符来匹配一组MIME类型,例如:image/ 将允许*/所有image/开始的MIME类型(例如image/jpeg,image/png),MIME类型名称不区分大小写。默认值是null,允许所有的MIME类型。更多信息请参考commom media types:

https://en.wikipedia.org/wiki/Media_type#List_of_common_media_types

minSize:上传文件的最小文件大小。默认值是null,没有最小限制。 maxSize:上传文件的最大文件大小。默认值是null,没有最大限制。 maxFiles:给定属性可以包括的最大文件数量。默认值是1,允许上传1个文件。如果此值大于1,则输入项必须是一个数组,且可上传的最大文件数是maxFiles。 checkExtensionByMimeType:是否根据文件的MIME类型检查文件的扩展名,如果根据MIME生成的扩展名与上传文件的扩展名不相同,则文件验证失败。默认值是true,进行此项检查。

FileValidator与yii\web\UploadedFile一起使用,请参考Uploading Files章节: http://www.yiiframework.com/doc-2.0/guide-input-file-upload.html

filter
[
	//去掉"username"和"email"输入项的首尾空格
    [['username', 'email'], 'filter', 'filter' => 'trim', 'skipOnArray' => true],
	//规范化"phone"输入项
    ['phone', 'filter', 'filter' => function ($value) {
		//在这里规范化电话输入项
        return $value;
    }],
]

此验证器不执行数据验证,它为验证项的值应用一个过滤器,并将返回值赋给验证项。

filter:一个PHP回调函数,它定义了一个过滤器。它可以是一个全局函数名,一个匿名函数等。函数形式必须是function($value){return $newValue;},此选项必须设置。 skipOnArray:输入值是一个数组时是否忽略此过滤器。默认值是false。注意:如果此过滤器不能处理输入的数组,你应将此选项设置为true,否则将会发生PHP错误。

小贴士:如果你需要去掉输入项的首尾空格,你要可以直接使用trim验证器。

小贴士:有很多PHP函数是符合filter回调函数格式的。例如:为确保一个属性是特定类型可以使用类型转换(如intval,boolval),你只需在过滤器中填写函数名即可,无需将它们再括起来。

['property','filter','filter'=>'boolval'],
['property','filter','filter'=>'intval'],
image
[
	//检查"primaryImage"是否符合设定的尺寸。
    ['primaryImage', 'image', 'extensions' => 'png, jpg',
        'minWidth' => 100, 'maxWidth' => 1000,
        'minHeight' => 100, 'maxHeight' => 1000,
    ],
]

此验证器将检测输入项是否是一个有效的图片文件,它从file验证器继承,拥有file的所有特性,另外,它还支持以下图片验证专有的特性: minWidth:图片的最小宽度。默认值是null,没有最小限制。 maxWidth:图片的最大宽度。默认值是null,没有最大限制。 minHeight:图片的最小高度。默认值是null,没有最小限制。 maxHeigth:图片的最大高度。默认值是null,没有最大限制。

ip
[
	//检查"ip_address"是否是一个有效的IPv4或IPv6地址
    ['ip_address', 'ip'],

	//检查"ip_address"是否是一个有效的IPv6地址或子网,值将扩展为IPv6全称形式
    ['ip_address', 'ip', 'ipv4' => false, 'subnet' => null, 'expandIPv6' => true],

	//检查"ip_address"是否是一个有效的IPv4或IPv6地址,允许反转字符(以'!'开头)
    ['ip_address', 'ip', 'negation' => true],
]

此验证器检查属性值是否是有效的IPv4/IPv6地址或子网地址,如果normalize或expandIPv6被使用,则属性值将会被改变。 此验证器有以下配置选项: ipv4:是否进行IPv4格式验证,默认值是true。 ipv6:是否进行IPv6格式验证,默认值是true。 subnet,是否进行CIDR子网验证,形如 192.168.10.0/24 true,子网是必须的,地址没有CIDR将被拒绝 false,地址无需是CIDR null,CIDR是可选的 默认值是false。 normalize,是否添加具有最小长度的CIDR前缀(IPv4为32,IPv6为128)到没有它的地址。仅当subnet不是false时生效,例如: 10.0.1.5 将标准化为10.0.1.5/32 2008:db0::1 将标准化为2008:db0::1/128 默认值为false。 negation,是否允许地址开始处包括反转字符(!),默认值是false expandIPv6,是否扩展IPv6地址为全符号格式,例如 :2008:db0::1将被扩展为2008:0db0:0000:0000:0000:0000:0000:0001。默认值是false。 ranges,允许或禁止的IPv4或IPv6范围数组。当此数组为空或此选项未设置,将允许所有的IP地址;否则,将顺序检查规则直到第一条相符为止。当没有规则相匹配时,IP地址将被禁用。

	例如:
		[
			'client_ip','ip','ranges'=>[
				'192.168.10.128',
				'!192.168.10.0/24',
				'any',//允许其他任何IP
			]	
		]

在此例中,将允许除了192.168.10.0/24网段的所有IPv4和IPv6访问,IPv4地址192.168.10.128也被允许,因为它在此限制前定义的。 networks:网络别名数组,将在ranges中使用。数组格式: key——别名名称 value——字符串数组,字符串可以是一个范围,IP地址或其他别名。字符串可以使用!进行反转(独立于negation选项) 以下别名是默认定义的: *:any any:0.0.0.0/0,::/0 private:10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,fd00::/8 multicast:224.0.0.0/4,ff00::/8 linklocal:169.254.0.0/16,fe80::/10 localhost:127.0.0.0/8,::1 documentation:192.0.2.0/24,198.51.100.0/24,203.0.113.0/24,2001:db8::/32 system:multicast、linklocal、localhost、documentation 信息:此验证器自2.0.7版本起生效。

in
[
	//检查level是否是1,2,3之一
	['level','in','range'=>[1,2,3]]	,
]

此验证器检查输入项的值是否在给定的列表值中。 range:给定的一个值列表,输入值将在此列表中查找。 strict:输入值与给定值列表之前比较是否按照严格模式(类型和值必须完全相同)。默认值是false。 not:检测结果是否被反转。默认值为false。当此属性被设置为true时,验证器将检查输入值是否不在给定的列表值中。 allowArray:是否允许输入项是一个数组,当此项为true且输入值是一个数组时,数组中的每个元素都必须在给定的列表值中,否则验证将失败。

//selectedDefault值在range范围内,则验证通过
['selectedDefault', 'in','range'=>[1,2,3,8]],
//selectedDefault值不在range范围内,则验证通过
['selectedDefault', 'in','range'=>[1,2,3,8],'not'=>true],
integer
[
	//检查age是一个整数
    ['age', 'integer'],
]

此验证器检查输入值是否是一个整数。 max:允许的最大值(包括),如果没有设置,意味着此验证器没有上限要求。 min:允许的最小值(包括),如果没有设置,意味着此验证器没有下限要求。

 ['selectedDefault', 'match','patern'=>15,'min'=>5],
match
[
    // checks if "username" starts with a letter and contains only word characters
	//检查"username"是以一个字符开头,并只包含
    ['username', 'match', 'pattern' => '/^[a-z]\w*$/i']
]

此验证器检查输入值是否与正则表达式相匹配。 pattern,输入值要匹配的正则表达式,此选项是必填项,否则将抛出异常。 not,是否将验证结果进行反转。默认值是false,只有当输入值与正则表达式相匹配时才验证通过。如果此项设为true,只有当输入值与正则表达式不匹配时才验证通过。

//selectedDefault值以字母开头,并仅包含数字和字母时验证通过
 ['selectedDefault', 'match','pattern'=> '/^[a-z]\w*$/i'],
//selectedDefault值与pattern不匹配时验证通过
 ['selectedDefault', 'match','pattern'=> '/^[a-z]\w*$/i','not'=>true],
number
[
	//检测'salary'是一个数字
    ['salary', 'number'],
]

此验证器检查输入项是否是一个数字,与double验证器相同。 max:允许的最大值(包括),如果没有设置,意味着此验证器没有上限要求。 min:允许的最小值(包括),如果没有设置,意味着此验证器没有下限要求。

required
[
	//检查"username"和"password"都不能为空
    [['username', 'password'], 'required'],
]

此验证器检查输入值不能为空。 requiredValue:输入值的期望值,如果没有设置,意味着输入项必须不为空。 strict:验证数据时是否检查数据类型。默认值是false。当requiredValue没有设置,此选项设置为true时,验证器将检查输入值是否为null;当此选项为false时,此验证器将使用宽松的规则去验证是空或非空。当requiredValue设置,此选项为true时,输入值与requiredValue还要进行数据类型的检测。

//输入项'selectedDefault'必须值为'abc'
['selectedDefault','required','requiredValue'=>'abc'],

信息:如何判断一个值是空或非空请查看专题Empty Values章节: http://www.yiiframework.com/doc-2.0/guide-input-validation.html#handling-empty-inputs

safe
[
	//标记"description"为safe属性
    ['description', 'safe'],
]

此验证器不执行数据验证,它用于标记一个属性是safe的。 safe属性请参见: http://www.yiiframework.com/doc-2.0/guide-structure-models.html#safe-attributes

string
[
	//检查'username'是一个字符串,且长度在4到24之间
    ['username', 'string', 'length' => [4, 24]],
]

此验证器检查输入值是一个字符串和指定的长度范围。

length:定义要验证的输入项的长度,它可以被定义为以下格式之一:
	1、一个整数:字符串有固定的长度
	2、有一个元素的数组:输入字符串的最小值(如 [8]),此值将覆盖min选项
	3、有两个元素的数组:输入字符串的最小值和最大值(如 [8,128])。此值将覆盖minmax选项。
min:输入字符串的最小长度,如果没有设置,意味着没有最小长度限制。
max:输入字符串的最大长度,如果没有设置,意味着没有最大长度限制。
encoding:要验证的输入项的编码格式,如果没有设置,将使用应用的charset值,其默认值是UTF-8
//'selectedDefault'必须是5个字符
['selectedDefault', 'string','length'=>5],
//'selectedDefault'至少有3个字符
['selectedDefault', 'string','length'=>[3]],
//'selectedDefault'至少有3个字符,最多8个字符
['selectedDefault', 'string','length'=>[3,8]],
trim
[
	//去掉"username"和"email"的首尾空格
    [['username', 'email'], 'trim'],
]

此验证器不执行数据验证,它将去掉输入项的首尾空格,注意,如果输入值是一个数组,此验证器将被忽略。

unique
[
	//a1输入项在a1属性列中是唯一的,则验证通过
    ['a1', 'unique'],

	//a1输入项须是唯一的,但在数据库中查找的列名是a2
    ['a1', 'unique', 'targetAttribute' => 'a2'],

	//a1和a2列组合后的唯一性检测,它们都会接收错误信息
    [['a1', 'a2'], 'unique', 'targetAttribute' => ['a1', 'a2']],

	//进行'a1'和'a2'列(a1,a2输入项应同时存在)组合后的唯一性检测,检测错误信息发送给a1输入项
    ['a1', 'unique', 'targetAttribute' => ['a1', 'a2']],

	//进行'a2'和'a3'列组合后的唯一性检测,取a2和a1输入项的值,检测错误信息发送给a1输入项
	//a1输入项的值对应查询a3列,不能搞错了。
    ['a1', 'unique', 'targetAttribute' => ['a2', 'a1' => 'a3']],

	//在AR模型\frontend\models\Country(数据表)中检测输入项countryName是否存在,检索的字段名称是name,限定条件是continent='Europe'。
	['countryName', 'unique',
		'targetAttribute' => 'name',
		'targetClass' => '\frontend\models\Country',
		'filter' => ['continent' => 'Europe'],
		'message' => '输入的国家名称已经存在!'
	],
]
//'name'输入项进行唯一性检测,在数据库中比对的字段名是'code'
['name', 'unique', 'targetAttribute' =>'code'],
<?= $form->field($model, 'code')->textInput(['maxlength' => true]) ?>

//'name''code'组合后唯一性检测,'name''code'输入项都接收错误信息
[['name','code'], 'unique', 'targetAttribute' =>['name','code']],
//与上句等效
[['code','name'], 'unique', 'targetAttribute' =>['name','code']],
//'name''code'组合后唯一性检测,仅'name'输入项接收错误信息
['name', 'unique', 'targetAttribute' =>['name','code']],
//进行'name''code'输入项组合的唯一性检测,在数据库中对应使用'name''code'字段,错误信息返回给continent输入项
//对'name''code'表单项进行检测联合唯一性检测,但错误信息发送给'continent'
//'name'表单项检查'name'字段,'code'表单项检查'code'字段,即两个字段值同时存在时(是同一条记录的两个字段值),才会报错!
['continent', 'unique', 'targetAttribute' =>['name','code']],
//进行'name''continent'输入项组合的唯一性检测,在数据库中使用'name''code'字段,错误信息返回给continent输入项
['continent', 'unique', 'targetAttribute' =>['name','continent'=>'code']],
//进行'population''continent'输入项组合的唯一性检测,在数据库中使用'name''code'字段,错误信息返回给continent输入项
//注意:此处的'population'输入项对应查询'name'字段,'continent'输入项对应查询'code'字段,不能搞反了。
['continent', 'unique', 'targetAttribute' =>['population'=>'name','continent'=>'code']],

//如果只有一个字段时,不能写成数组形式:
//['continent', 'unique', 'targetAttribute' =>['name']],//错误的写法
['continent', 'unique', 'targetAttribute' =>'name'],//正确的写法
url
[
	//检查'website'是一个有效的URL,如果网址没有URI模式,则在前面自动添加"http://"
    ['website', 'url', 'defaultScheme' => 'http'],
]

此验证器检查输入项是否是一个有效的URL。 validSchemes:有效的URI模式数组,默认值是['http','https'],http和https的URL都是有效的。 defaultScheme:输入项没有模式时自动在前面添加的默认URI模式。默认值是null,不修改输入值。 enableIDN:验证器是否要考虑IDN账号(Internationalized Domain Names Aaccount)。默认值是false。注意:要使用IDN验证,你需要安装和启用PHP扩展intl,否则将抛出异常。

(全文完)

觉得很赞
    没有找到数据。
您需要登录后才可以回复。登录 | 立即注册