Yii 提供了一套常用的核心验证器,主要位于 yii\validators
命名空间下。您可以使用 *别名* 来指定这些核心验证器的使用,而不是使用冗长的验证器类名。例如,您可以使用别名 required
来引用 yii\validators\RequiredValidator 类
public function rules()
{
return [
[['email', 'password'], 'required'],
];
}
该 yii\validators\Validator::$builtInValidators 属性声明了所有支持的验证器别名。
在下文中,我们将描述每个核心验证器的主要用法和属性。
[
// checks if "selected" is either 0 or 1, regardless of data type
['selected', 'boolean'],
// checks if "deleted" is of boolean type, either true or false
['deleted', 'boolean', 'trueValue' => true, 'falseValue' => false, 'strict' => true],
]
此验证器检查输入值是否为布尔值。
trueValue
:表示 true
的值。默认为 '1'
。falseValue
:表示 false
的值。默认为 '0'
。strict
:输入值的类型是否应与 trueValue
和 falseValue
的类型匹配。默认为 false
。注意:由于通过 HTML 表单提交的数据输入都是字符串,因此您通常应将 strict 属性保留为
false
。
[
['verificationCode', 'captcha'],
]
此验证器通常与 yii\captcha\CaptchaAction 和 yii\captcha\Captcha 一起使用,以确保输入与 CAPTCHA 小部件显示的验证码相同。
caseSensitive
:验证码比较是否区分大小写。默认为 false
。captchaAction
:对应于呈现 CAPTCHA 图像的 CAPTCHA 操作 的 路由。默认为 'site/captcha'
。skipOnEmpty
:如果输入为空,是否可以跳过验证。默认为 false
,这意味着输入是必需的。[
// validates if the value of "password" attribute equals to that of "password_repeat"
['password', 'compare'],
// same as above but with explicitly specifying the attribute to compare with
['password', 'compare', 'compareAttribute' => 'password_repeat'],
// validates if age is greater than or equal to 30
['age', 'compare', 'compareValue' => 30, 'operator' => '>=', 'type' => 'number'],
]
此验证器将指定的输入值与另一个值进行比较,并确保它们之间的关系是否与 operator
属性指定的相同。
compareAttribute
:应与之比较的属性的名称。当验证器用于验证属性时,此属性的默认值为属性名称后缀为 _repeat
。例如,如果要验证的属性是 password
,那么此属性将默认为 password_repeat
。compareValue
: 要与输入值进行比较的常量值(或返回值的闭包)。当此属性和 compareAttribute
都被指定时,此属性将优先。operator
: 比较运算符。默认为 ==
,表示检查输入值是否等于 compareAttribute
或 compareValue
的值。支持以下运算符==
: 检查两个值是否相等。比较是在非严格模式下进行的。===
: 检查两个值是否相等。比较是在严格模式下进行的。!=
: 检查两个值是否不相等。比较是在非严格模式下进行的。!==
: 检查两个值是否不相等。比较是在严格模式下进行的。>
: 检查被验证的值是否大于被比较的值。>=
: 检查被验证的值是否大于或等于被比较的值。<
: 检查被验证的值是否小于被比较的值。<=
: 检查被验证的值是否小于或等于被比较的值。type
: 默认的比较类型为 'string',这意味着值逐字节比较。当比较数字时,请确保将 $type 设置为 'number' 以启用数字比较。比较验证器只能用于比较字符串和数字。如果您需要比较日期之类的值,您有两个选择。要将日期与固定值进行比较,您可以简单地使用 date 验证器并指定其 $min 或 $max 属性。如果您需要比较表单中输入的两个日期,例如 fromDate
和 toDate
字段,您可以使用比较验证器和日期验证器的组合,如下所示
['fromDate', 'date', 'timestampAttribute' => 'fromDate'],
['toDate', 'date', 'timestampAttribute' => 'toDate'],
['fromDate', 'compare', 'compareAttribute' => 'toDate', 'operator' => '<', 'enableClientValidation' => false],
由于验证器按指定的顺序执行,因此这将首先验证 fromDate
和 toDate
中输入的值是否为有效的日期值,如果是,它们将被转换为机器可读格式。之后,这两个值将使用比较验证器进行比较。客户端验证未启用,因为这只会对服务器端有效,因为日期验证器当前不提供客户端验证,所以 $enableClientValidation 也在比较验证器上设置为 false
。
date 验证器有三种不同的快捷方式
[
[['from_date', 'to_date'], 'date'],
[['from_datetime', 'to_datetime'], 'datetime'],
[['some_time'], 'time'],
]
此验证器检查输入值是否为以正确格式显示的日期、时间或日期时间。可选地,它可以将输入值转换为 UNIX 时间戳或其他机器可读格式,并将其存储在通过 timestampAttribute 指定的属性中。
format
: 被验证的值应采用的日期/时间格式。这可以是 ICU 手册 中描述的日期时间模式。或者,这可以是一个以 php:
为前缀的字符串,代表 PHP Datetime
类可以识别的格式。有关支持的格式,请参考 https://php.ac.cn/manual/en/datetime.createfromformat.php。如果未设置,它将采用 Yii::$app->formatter->dateFormat
的值。有关更多详细信息,请参见 API 文档。
timestampAttribute
: 此验证器可以将从输入日期/时间转换的 UNIX 时间戳分配到的属性的名称。这可以与正在验证的属性相同。如果是这种情况,原始值将在验证后被时间戳值覆盖。有关用法示例,请参见 "使用 DatePicker 处理日期输入"。
从 2.0.4 版本开始,可以使用 $timestampAttributeFormat 和 $timestampAttributeTimeZone 为此属性指定格式和时区。
注意,当使用 timestampAttribute
时,输入值将被转换为 unix 时间戳,该时间戳根据定义是 UTC 时间,因此将执行从 输入时区 到 UTC 的转换(此行为可以通过设置 $defaultTimeZone 自 2.0.39 版本起改变)。
如果输入是可选的,您可能还想在日期验证器之外添加 默认值过滤器 以确保空输入存储为 null
。否则,您可能会在数据库中遇到 0000-00-00
之类的日期,或在日期选择器的输入字段中遇到 1970-01-01
之类的日期。
[
[['from_date', 'to_date'], 'default', 'value' => null],
[['from_date', 'to_date'], 'date'],
],
[
// set "age" to be null if it is empty
['age', 'default', 'value' => null],
// set "country" to be "USA" if it is empty
['country', 'default', 'value' => 'USA'],
// assign "from" and "to" with a date 3 days and 6 days from today, if they are empty
[['from', 'to'], 'default', 'value' => function ($model, $attribute) {
return date('Y-m-d', strtotime($attribute === 'to' ? '+3 days' : '+6 days'));
}],
]
此验证器不验证数据。相反,如果被验证的属性为空,它会将默认值分配给被验证的属性。
value
: 默认值或作为回调的闭包,该回调返回将被分配给被验证的属性的默认值(如果它们为空)。闭包的签名应如下所示:function foo($model, $attribute) {
// ... compute $value ...
return $value;
}
信息:如何确定值是否为空是一个单独的主题,在 空值 部分中介绍。数据库架构中的默认值可以通过模型的 loadDefaultValues() 方法加载。
[
// checks if "salary" is a double number
['salary', 'double'],
]
此验证器检查输入值是否为双精度数。它等效于 number 验证器。
max
: 值的上限(含)。如果未设置,则表示验证器不检查上限。min
: 值的下限(含)。如果未设置,则表示验证器不检查下限。信息:此验证器从 2.0.4 版本开始可用。
[
// checks if every category ID is an integer
['categoryIDs', 'each', 'rule' => ['integer']],
]
此验证器仅适用于数组属性。它验证数组的每个元素是否都能通过指定的验证规则成功验证。在上面的示例中,categoryIDs
属性必须取数组值,并且每个数组元素将通过 integer
验证规则进行验证。
rule
: 指定验证规则的数组。数组中的第一个元素指定验证器的类名或别名。数组中其余的名称-值对用于配置验证器对象。allowMessageFromRule
: 是否使用嵌入式验证规则返回的错误消息。默认为 true
。如果为 false
,它将使用 message
作为错误消息。注意:如果属性值不是数组,则认为验证失败,
message
将作为错误消息返回。
[
// checks if "email" is a valid email address
['email', 'email'],
]
此验证器检查输入值是否为有效的电子邮件地址。
allowName
: 是否允许电子邮件地址中的名称(例如 John Smith <[email protected]>
)。默认为 false
。checkDNS
: 是否检查电子邮件的域是否存在并具有 A 或 MX 记录。请注意,此检查可能会因 DNS 问题而失败,即使电子邮件地址实际上有效。默认为 false
。enableIDN
: 验证过程是否应考虑 IDN(国际化域名)。默认为 false
。请注意,要使用 IDN 验证,您必须安装并启用 intl
PHP 扩展,否则将抛出异常。[
// a1 needs to exist in the column represented by the "a1" attribute
// i.e. a1 = 1, valid if there is value 1 in column "a1"
['a1', 'exist'],
// equivalent of
['a1', 'exist', 'targetAttribute' => 'a1'],
['a1', 'exist', 'targetAttribute' => ['a1' => 'a1']],
// a1 needs to exist, but its value will use a2 to check for the existence
// i.e. a1 = 2, valid if there is value 2 in column "a2"
['a1', 'exist', 'targetAttribute' => 'a2'],
// equivalent of
['a1', 'exist', 'targetAttribute' => ['a1' => 'a2']],
// a2 needs to exist, its value will use a2 to check for the existence, a1 will receive error message
// i.e. a2 = 2, valid if there is value 2 in column "a2"
['a1', 'exist', 'targetAttribute' => ['a2']],
// equivalent of
['a1', 'exist', 'targetAttribute' => ['a2' => 'a2']],
// a1 and a2 need to exist together, and the first attribute without errors will receive error message
// i.e. a1 = 3, a2 = 4, valid if there is value 3 in column "a1" and value 4 in column "a2"
[['a1', 'a2'], 'exist', 'targetAttribute' => ['a1', 'a2']],
// equivalent of
[['a1', 'a2'], 'exist', 'targetAttribute' => ['a1' => 'a1', 'a2' => 'a2']],
// a1 and a2 need to exist together, only a1 will receive error message
// i.e. a1 = 5, a2 = 6, valid if there is value 5 in column "a1" and value 6 in column "a2"
['a1', 'exist', 'targetAttribute' => ['a1', 'a2']],
// equivalent of
['a1', 'exist', 'targetAttribute' => ['a1' => 'a1', 'a2' => 'a2']],
// a1 needs to exist by checking the existence of both a2 and a3 (using a1 value)
// i.e. a1 = 7, a2 = 8, valid if there is value 7 in column "a3" and value 8 in column "a2"
['a1', 'exist', 'targetAttribute' => ['a2', 'a1' => 'a3']],
// equivalent of
['a1', 'exist', 'targetAttribute' => ['a2' => 'a2', 'a1' => 'a3']],
// a1 needs to exist. If a1 is an array, then every element of it must exist.
// i.e. a1 = 9, valid if there is value 9 in column "a1"
// a1 = [9, 10], valid if there are values 9 and 10 in column "a1"
['a1', 'exist', 'allowArray' => true],
// type_id needs to exist in the column "id" in the table defined in ProductType class
// i.e. type_id = 1, valid if there is value 1 in column "id" of ProductType's table
['type_id', 'exist', 'targetClass' => ProductType::class, 'targetAttribute' => ['type_id' => 'id']],
// the same as the previous, but using already defined relation "type"
['type_id', 'exist', 'targetRelation' => 'type'],
]
此验证器检查输入值是否可以在由 活动记录 属性表示的表列中找到。您可以使用 targetAttribute
指定 活动记录 属性,并使用 targetClass
指定相应的 活动记录 类。如果您没有指定它们,它们将采用正在验证的属性和模型类的值。
您可以使用此验证器来验证单个列或多个列(即,多个属性值的组合应该存在)。如果在同时检查多个列时(例如示例中的 ['a1', 'a2']
)验证失败,并且 skipOnError
设置为 true
,则只有没有先前错误的第一个属性将收到新的错误消息。
targetClass
: 活动记录 类的名称,应使用它来查找正在验证的输入值。如果未设置,将使用当前正在验证的模型的类。targetAttribute
: targetClass
中的属性的名称,应使用它来验证输入值的存在。如果未设置,它将使用当前正在验证的属性的名称。您可以使用数组来验证多个列的同时存在。数组值是将用于验证存在的属性,而数组键是将要验证其值的属性。如果键和值相同,则可以只指定值。targetAttribute
的配置将被视为null
=> 将检查当前验证的 ModelA 属性的值与存储的 ModelB 同名属性的值。'a'
=> 将检查当前验证的 ModelA 属性的值与存储的 ModelB 的 "a" 属性的值。['a']
=> 将检查 ModelA 的 "a" 属性的值与存储的 ModelB 的 "a" 属性的值。['a' => 'a']
=> 与上面相同['a', 'b']
=> 将检查 ModelA 的 "a" 属性的值与存储的 ModelB 的 "a" 属性的值,同时检查 ModelA 的 "b" 属性的值与存储的 ModelB 的 "b" 属性的值。['a' => 'b']
=> 将检查 ModelA 的 "a" 属性的值与存储的 ModelB 的 "b" 属性的值。targetRelation
: 从 2.0.14 版本开始,您可以使用方便的属性 targetRelation
,它使用来自请求关系的规范覆盖 targetClass
和 targetAttribute
属性。filter
: 将应用于用于检查输入值是否存在 的 DB 查询的附加过滤器。这可以是字符串,也可以是表示附加查询条件的数组(有关查询条件格式,请参阅 yii\db\Query::where()),也可以是具有 function ($query)
签名的匿名函数,其中 $query
是您可以修改的 Query 对象。allowArray
: 是否允许输入值为数组。默认为 false
。如果此属性为 true
且输入为数组,则数组的每个元素都必须存在于目标列中。请注意,如果您通过将 targetAttribute
设置为数组来验证多个列,则不能将此属性设置为 true
。[
// checks if "primaryImage" is an uploaded image file in PNG, JPG or GIF format.
// the file size must be less than 1MB
['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 类型。有关更多详细信息,请参阅通用媒体类型。minSize
: 上传文件所需的最小字节数。默认为null
,表示没有下限。maxSize
: 上传文件允许的最大字节数。默认为null
,表示没有上限。maxFiles
: 给定属性可以容纳的最大文件数。默认为 1,表示输入必须是单个上传文件。如果大于 1,则输入必须是包含最多maxFiles
个上传文件的数组。checkExtensionByMimeType
: 是否根据文件的 MIME 类型检查文件扩展名。如果 MIME 类型检查生成的扩展名与上传的文件扩展名不同,则该文件将被视为无效。默认为true
,表示执行此类检查。FileValidator
与yii\web\UploadedFile一起使用。有关上传文件和执行上传文件验证的完整说明,请参阅上传文件部分。
[
// trim "username" and "email" inputs
[['username', 'email'], 'filter', 'filter' => 'trim', 'skipOnArray' => true],
// normalize "phone" input
['phone', 'filter', 'filter' => function ($value) {
// normalize phone input here
return $value;
}],
// normalize "phone" using the function "normalizePhone"
['phone', 'filter', 'filter' => [$this, 'normalizePhone']],
public function normalizePhone($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'],
[
// checks if "primaryImage" is a valid image with proper size
['primaryImage', 'image', 'extensions' => 'png, jpg',
'minWidth' => 100, 'maxWidth' => 1000,
'minHeight' => 100, 'maxHeight' => 1000,
],
]
此验证器检查输入值是否表示有效的图像文件。它从file验证器扩展而来,因此继承了它所有的属性。此外,它还支持以下专门用于图像验证目的的附加属性
minWidth
: 图像的最小宽度。默认为null
,表示没有下限。maxWidth
: 图像的最大宽度。默认为null
,表示没有上限。minHeight
: 图像的最小高度。默认为null
,表示没有下限。maxHeight
: 图像的最大高度。默认为null
,表示没有上限。[
// checks if "ip_address" is a valid IPv4 or IPv6 address
['ip_address', 'ip'],
// checks if "ip_address" is a valid IPv6 address or subnet,
// value will be expanded to full IPv6 notation.
['ip_address', 'ip', 'ipv4' => false, 'subnet' => null, 'expandIPv6' => true],
// checks if "ip_address" is a valid IPv4 or IPv6 address,
// allows negation character `!` at the beginning
['ip_address', 'ip', 'negation' => true],
]
验证器检查属性值是否为有效的 IPv4/IPv6 地址或子网。如果启用了规范化或 IPv6 扩展,它也可能更改属性的值。
验证器具有以下配置选项
ipv4
: 验证的值是否可以是 IPv4 地址。默认为true
。ipv6
: 验证的值是否可以是 IPv6 地址。默认为true
。subnet
: 地址是否可以是带有 CIDR 子网的 IP,例如192.168.10.0/24
true
- 需要子网,没有 CIDR 的地址将被拒绝false
- 地址不能有 CIDRnull
- CIDR 是可选的默认为false
。
normalize
: 是否向没有 CIDR 的地址添加具有最小长度的 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 地址被禁止,因为它没有匹配任何规则。
例如:`
php [
'client_ip', 'ip', 'ranges' => [
'192.168.10.128'
'!192.168.10.0/24',
'any' // allows any other IP addresses
]
] `
在此示例中,除192.168.10.0/24
子网以外,所有 IPv4 和 IPv6 地址都允许访问。IPv4 地址192.168.10.128
也允许,因为它在限制之前列出。
networks
: 可以在ranges
中使用的网络别名数组。数组格式
!
(独立于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 起可用。
[
// checks if "level" is 1, 2 or 3
['level', 'in', 'range' => [1, 2, 3]],
]
此验证器检查输入值是否可以在给定值列表中找到。
range
: 输入值应该在其内查找的给定值列表。strict
: 输入值与给定值之间的比较是否应严格(类型和值都必须相同)。默认为false
。not
: 是否应反转验证结果。默认为false
。当此属性设置为true
时,验证器检查输入值是否不在给定值列表中。allowArray
: 是否允许输入值为数组。当这为true
且输入值为数组时,数组中的每个元素都必须在给定值列表中找到,否则验证将失败。[
// checks if "age" is an integer
['age', 'integer'],
]
此验证器检查输入值是否为整数。
max
: 值的上限(含)。如果未设置,则表示验证器不检查上限。min
: 值的下限(含)。如果未设置,则表示验证器不检查下限。[
// checks if "username" starts with a letter and contains only word characters
['username', 'match', 'pattern' => '/^[a-z]\w*$/i']
]
此验证器检查输入值是否与指定的正则表达式匹配。
pattern
: 输入值应匹配的正则表达式。此属性必须设置,否则将抛出异常。not
: 是否反转验证结果。默认为false
,表示仅当输入值与模式匹配时,验证才成功。如果设置为true
,则仅当输入值不与模式匹配时,验证才被视为成功。[
// checks if "salary" is a number
['salary', 'number'],
]
此验证器检查输入值是否为数字。它等效于double验证器。
max
: 值的上限(含)。如果未设置,则表示验证器不检查上限。min
: 值的下限(含)。如果未设置,则表示验证器不检查下限。[
// checks if both "username" and "password" are not empty
[['username', 'password'], 'required'],
]
此验证器检查输入值是否提供且不为空。
requiredValue
: 输入应该具有的期望值。如果未设置,则表示输入不应为空。strict
: 验证值时是否检查数据类型。默认为false
。当requiredValue
未设置时,如果此属性为true
,则验证器将检查输入值是否不严格为null
;如果此属性为false
,则验证器将使用宽松规则来确定值是否为空。当requiredValue
设置后,如果此属性为true
,则输入与requiredValue
之间的比较也将检查数据类型。信息:如何确定值是否为空是一个单独的主题,在空值部分中介绍。
[
// marks "description" to be a safe attribute
['description', 'safe'],
]
此验证器不执行数据验证。相反,它用于标记属性为安全属性。
[
// checks if "username" is a string whose length is between 4 and 24
['username', 'string', 'length' => [4, 24]],
]
此验证器检查输入值是否为具有特定长度的有效字符串。
length
: 指定要验证的输入字符串的长度限制。可以以以下形式之一指定[8]
)。这将覆盖min
。[8, 128]
)。这将覆盖min
和max
。min
: 输入字符串的最小长度。如果未设置,则表示没有最小长度限制。max
: 输入字符串的最大长度。如果未设置,则表示没有最大长度限制。encoding
: 要验证的输入字符串的编码。如果未设置,它将使用应用程序的字符集值,该值默认为UTF-8
。[
// trims the white spaces surrounding "username" and "email"
[['username', 'email'], 'trim'],
]
此验证器不执行数据验证。相反,它将修剪输入值周围的空格。请注意,如果输入值是数组,则此验证器将忽略它。
[
// a1 needs to be unique in the column represented by the "a1" attribute
// i.e. a1 = 1, valid if there is no value 1 in column "a1"
['a1', 'unique'],
// equivalent of
['a1', 'unique', 'targetAttribute' => 'a1'],
['a1', 'unique', 'targetAttribute' => ['a1' => 'a1']],
// a1 needs to be unique, but column a2 will be used to check the uniqueness of the a1 value
// i.e. a1 = 2, valid if there is no value 2 in column "a2"
['a1', 'unique', 'targetAttribute' => 'a2'],
// equivalent of
['a1', 'unique', 'targetAttribute' => ['a1' => 'a2']],
// a1 and a2 need to be unique together, and the first attribute without errors will receive error message
// i.e. a1 = 3, a2 = 4, valid if there is no value 3 in column "a1" and at the same time no value 4 in column "a2"
[['a1', 'a2'], 'unique', 'targetAttribute' => ['a1', 'a2']],
// equivalent of
[['a1', 'a2'], 'unique', 'targetAttribute' => ['a1' => 'a1', 'a2' => 'a2']],
// a1 and a2 need to be unique together, only a1 will receive error message
['a1', 'unique', 'targetAttribute' => ['a1', 'a2']],
// a1 needs to be unique by checking the uniqueness of both a2 and a3 (using a1 value)
// i.e. a1 = 5, a2 = 6, valid if there is no value 5 in column "a3" and at the same time no value 6 in column "a2"
['a1', 'unique', 'targetAttribute' => ['a2', 'a1' => 'a3']],
// type_id needs to be unique in the column "id" in the table defined in ProductType class
// i.e. type_id = 1, valid if there is no value 1 in column "id" of ProductType's table
['type_id', 'unique', 'targetClass' => ProductType::class, 'targetAttribute' => 'id'],
]
此验证器检查输入值在表列中是否唯一。它仅适用于 Active Record 模型属性。它支持针对单个列或多个列进行验证。如果在同时检查多个列时验证失败(例如示例中的 ['a1', 'a2']
)并且 skipOnError
设置为 true
,则只有第一个没有先前错误的属性将收到新的错误消息。
targetClass
: 活动记录 类的名称,应使用它来查找正在验证的输入值。如果未设置,将使用当前正在验证的模型的类。targetAttribute
:targetClass
中用于验证输入值唯一性的属性名称。如果未设置,它将使用当前正在验证的属性的名称。可以使用数组来同时验证多个列的唯一性。数组值是用于验证唯一性的属性,而数组键是将要验证其值的属性。如果键和值相同,则可以只指定值。targetAttribute
的配置将被视为null
=> 将检查当前验证的 ModelA 属性的值与存储的 ModelB 同名属性的值。'a'
=> 将检查当前验证的 ModelA 属性的值与存储的 ModelB 的 "a" 属性的值。['a']
=> 将检查 ModelA 的 "a" 属性的值与存储的 ModelB 的 "a" 属性的值。['a' => 'a']
=> 与上面相同['a', 'b']
=> 将检查 ModelA 的 "a" 属性的值与存储的 ModelB 的 "a" 属性的值,同时检查 ModelA 的 "b" 属性的值与存储的 ModelB 的 "b" 属性的值。['a' => 'b']
=> 将检查 ModelA 的 "a" 属性的值与存储的 ModelB 的 "b" 属性的值。filter
:用于检查输入值唯一性的 DB 查询的额外过滤器。这可以是字符串,或表示额外查询条件的数组(关于查询条件格式,请参考 yii\db\Query::where()),或者是一个匿名函数,其签名为 function ($query)
,其中 $query
是 Query 对象,您可以在函数中修改该对象。[
// checks if "website" is a valid URL. Prepend "http://" to the "website" attribute
// if it does not have a URI scheme
['website', 'url', 'defaultScheme' => 'http'],
]
此验证器检查输入值是否为有效的 URL。
validSchemes
:一个数组,指定应被视为有效的 URI 方案。默认为 ['http', 'https']
,这意味着 http
和 https
URL 都被视为有效。defaultScheme
:如果输入没有方案部分,则将追加到输入的默认 URI 方案。默认为 null
,这意味着不修改输入值。enableIDN
:验证器是否应该考虑 IDN(国际化域名)。默认为 false
。请注意,为了使用 IDN 验证,您必须安装并启用 intl
PHP 扩展,否则将抛出异常。注意:验证器检查 URL 方案和主机部分是否正确。它不会检查 URL 的其余部分,并且没有设计为防止 XSS 或任何其他攻击。有关开发应用程序时威胁预防的更多信息,请参阅 安全最佳实践 文章。
发现错别字或您认为此页面需要改进?
在 github 上编辑它 !
注册 或 登录 发表评论。