核心驗(yàn)證器(Core Validators)

2018-02-24 15:40 更新

核心驗(yàn)證器(Core Validators)

Yii 提供一系列常用的核心驗(yàn)證器,主要存在于?yii\validators?命名空間之下。為了避免使用冗長(zhǎng)的類(lèi)名,你可以直接用昵稱(chēng)來(lái)指定相應(yīng)的核心驗(yàn)證器。比如你可以用?required?昵稱(chēng)代指 yii\validators\RequiredValidator 類(lèi):

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

yii\validators\Validator::builtInValidators 屬性聲明了所有被支持的驗(yàn)證器昵稱(chēng)。

下面,我們將詳細(xì)介紹每一款驗(yàn)證器的主要用法和屬性。

yii\validators\BooleanValidator

[
    // 檢查 "selected" 是否為 0 或 1,無(wú)視數(shù)據(jù)類(lèi)型
    ['selected', 'boolean'],

    // 檢查 "deleted" 是否為布爾類(lèi)型,即 true 或 false
    ['deleted', 'boolean', 'trueValue' => true, 'falseValue' => false, 'strict' => true],
]

該驗(yàn)證器檢查輸入值是否為一個(gè)布爾值。

  • trueValue: 代表的值。默認(rèn)為?'1'。
  • falseValue:代表的值。默認(rèn)為?'0'
  • strict:是否要求待測(cè)輸入必須嚴(yán)格匹配?trueValue?或?falseValue。默認(rèn)為?false

注意:因?yàn)橥ㄟ^(guò) HTML 表單傳遞的輸入數(shù)據(jù)都是字符串類(lèi)型,所以一般情況下你都需要保持 yii\validators\BooleanValidator::strict 屬性為假。

yii\captcha\CaptchaValidator

[
    ['verificationCode', 'captcha'],
]

該驗(yàn)證器通常配合 yii\captcha\CaptchaAction 以及 yii\captcha\Captcha 使用,以確保某一輸入與 yii\captcha\Captcha 小部件所顯示的驗(yàn)證代碼(verification code)相同。

  • caseSensitive:對(duì)驗(yàn)證代碼的比對(duì)是否要求大小寫(xiě)敏感。默認(rèn)為 false。
  • captchaAction:指向用于渲染 CAPTCHA 圖片的 yii\captcha\CaptchaAction 的?路由。默認(rèn)為?'site/captcha'
  • skipOnEmpty:當(dāng)輸入為空時(shí),是否跳過(guò)驗(yàn)證。默認(rèn)為 false,也就是輸入值為必需項(xiàng)。

    yii\validators\CompareValidator

[
    // 檢查 "password" 特性的值是否與 "password_repeat" 的值相同
    ['password', 'compare'],

    // 檢查年齡是否大于等于 30
    ['age', 'compare', 'compareValue' => 30, 'operator' => '>='],
]

該驗(yàn)證器比較兩個(gè)特定輸入值之間的關(guān)系是否與?operator?屬性所指定的相同。

  • compareAttribute:用于與原特性相比較的特性名稱(chēng)。當(dāng)該驗(yàn)證器被用于驗(yàn)證某目標(biāo)特性時(shí),該屬性會(huì)默認(rèn)為目標(biāo)屬性加后綴_repeat。舉例來(lái)說(shuō),若目標(biāo)特性為?password,則該屬性默認(rèn)為?password_repeat
  • compareValue:用于與輸入值相比較的常量值。當(dāng)該屬性與?compareAttribute?屬性同時(shí)被指定時(shí),該屬性?xún)?yōu)先被使用。
  • operator:比較操作符。默認(rèn)為?==,意味著檢查輸入值是否與?compareAttribute?或?compareValue?的值相等。該屬性支持如下操作符:
    • ==:檢查兩值是否相等。比對(duì)為非嚴(yán)格模式。
    • ===:檢查兩值是否全等。比對(duì)為嚴(yán)格模式。
    • !=:檢查兩值是否不等。比對(duì)為非嚴(yán)格模式。
    • !==:檢查兩值是否不全等。比對(duì)為嚴(yán)格模式。
    • >:檢查待測(cè)目標(biāo)值是否大于給定被測(cè)值。
    • >=:檢查待測(cè)目標(biāo)值是否大于等于給定被測(cè)值。
    • <:檢查待測(cè)目標(biāo)值是否小于給定被測(cè)值。
    • <=:檢查待測(cè)目標(biāo)值是否小于等于給定被測(cè)值。

yii\validators\DateValidator

[
    [['from', 'to'], 'date'],
]

該驗(yàn)證器檢查輸入值是否為適當(dāng)格式的 date,time,或者 datetime。另外,它還可以幫你把輸入值轉(zhuǎn)換為一個(gè) UNIX 時(shí)間戳并保存到 yii\validators\DateValidator::timestampAttribute 屬性所指定的特性里。

  • format:待測(cè)的 日期/時(shí)間 格式。請(qǐng)參考?date_create_from_format() 相關(guān)的 PHP 手冊(cè)了解設(shè)定格式字符串的更多細(xì)節(jié)。默認(rèn)值為'Y-m-d'。
  • timestampAttribute:用于保存用輸入時(shí)間/日期轉(zhuǎn)換出來(lái)的 UNIX 時(shí)間戳的特性。

yii\validators\DefaultValueValidator

[
    // 若 "age" 為空,則將其設(shè)為 null
    ['age', 'default', 'value' => null],

    // 若 "country" 為空,則將其設(shè)為 "USA"
    ['country', 'default', 'value' => 'USA'],

    // 若 "from" 和 "to" 為空,則分別給他們分配自今天起,3 天后和 6 天后的日期。
    [['from', 'to'], 'default', 'value' => function ($model, $attribute) {
        return date('Y-m-d', strtotime($attribute === 'to' ? '+3 days' :'+6 days'));
    }],
]

該驗(yàn)證器并不進(jìn)行數(shù)據(jù)驗(yàn)證。而是,給為空的待測(cè)特性分配默認(rèn)值。

  • value:默認(rèn)值,或一個(gè)返回默認(rèn)值的 PHP Callable 對(duì)象(即回調(diào)函數(shù))。它們會(huì)分配給檢測(cè)為空的待測(cè)特性。PHP 回調(diào)方法的樣式如下:
function foo($model, $attribute) {
    // ... 計(jì)算 $value ...
    return $value;
}

補(bǔ)充:如何判斷待測(cè)值是否為空,被寫(xiě)在另外一個(gè)話(huà)題的處理空輸入章節(jié)。

yii\validators\NumberValidator

[
    // 檢查 "salary" 是否為浮點(diǎn)數(shù)
    ['salary', 'double'],
]

該驗(yàn)證器檢查輸入值是否為雙精度浮點(diǎn)數(shù)。他等效于?number?驗(yàn)證器。

  • max:上限值(含界點(diǎn))。若不設(shè)置,則驗(yàn)證器不檢查上限。
  • min:下限值(含界點(diǎn))。若不設(shè)置,則驗(yàn)證器不檢查下限。

    yii\validators\EmailValidator

[
    // 檢查 "email" 是否為有效的郵箱地址
    ['email', 'email'],
]

該驗(yàn)證器檢查輸入值是否為有效的郵箱地址。

  • allowName:檢查是否允許帶名稱(chēng)的電子郵件地址 (e.g.?張三 <John.san@example.com>)。 默認(rèn)為 false。
  • checkDNS:檢查郵箱域名是否存在,且有沒(méi)有對(duì)應(yīng)的 A 或 MX 記錄。不過(guò)要知道,有的時(shí)候該項(xiàng)檢查可能會(huì)因?yàn)榕R時(shí)性 DNS 故障而失敗,哪怕它其實(shí)是有效的。默認(rèn)為 false。
  • enableIDN:驗(yàn)證過(guò)程是否應(yīng)該考慮 IDN(internationalized domain names,國(guó)際化域名,也稱(chēng)多語(yǔ)種域名,比如中文域名)。默認(rèn)為 false。要注意但是為使用 IDN 驗(yàn)證功能,請(qǐng)先確保安裝并開(kāi)啟?intl?PHP 擴(kuò)展,不然會(huì)導(dǎo)致拋出異常。

yii\validators\ExistValidator

[
    // a1 需要在 "a1" 特性所代表的字段內(nèi)存在
    ['a1', 'exist'],

    // a1 必需存在,但檢驗(yàn)的是 a1 的值在字段 a2 中的存在性
    ['a1', 'exist', 'targetAttribute' => 'a2'],

    // a1 和 a2 的值都需要存在,且它們都能收到錯(cuò)誤提示
    [['a1', 'a2'], 'exist', 'targetAttribute' => ['a1', 'a2']],

    // a1 和 a2 的值都需要存在,只有 a1 能接收到錯(cuò)誤信息
    ['a1', 'exist', 'targetAttribute' => ['a1', 'a2']],

    // 通過(guò)同時(shí)在 a2 和 a3 字段中檢查 a2 和 a1 的值來(lái)確定 a1 的存在性
    ['a1', 'exist', 'targetAttribute' => ['a2', 'a1' => 'a3']],

    // a1 必需存在,若 a1 為數(shù)組,則其每個(gè)子元素都必須存在。
    ['a1', 'exist', 'allowArray' => true],
]

該驗(yàn)證器檢查輸入值是否在某表字段中存在。它只對(duì)活動(dòng)記錄類(lèi)型的模型類(lèi)特性起作用,能支持對(duì)一個(gè)或多過(guò)字段的驗(yàn)證。

  • targetClass:用于查找輸入值的目標(biāo)?AR?類(lèi)。若不設(shè)置,則會(huì)使用正在進(jìn)行驗(yàn)證的當(dāng)前模型類(lèi)。
  • targetAttribute:用于檢查輸入值存在性的?targetClass?的模型特性。
    • 若不設(shè)置,它會(huì)直接使用待測(cè)特性名(整個(gè)參數(shù)數(shù)組的首元素)。
    • 除了指定為字符串以外,你也可以用數(shù)組的形式,同時(shí)指定多個(gè)用于驗(yàn)證的表字段,數(shù)組的鍵和值都是代表字段的特性名,值表示?targetClass?的待測(cè)數(shù)據(jù)源字段,而鍵表示當(dāng)前模型的待測(cè)特性名。
    • 若鍵和值相同,你可以只指定值。(如:['a2']?就代表?['a2'=>'a2']
  • filter:用于檢查輸入值存在性必然會(huì)進(jìn)行數(shù)據(jù)庫(kù)查詢(xún),而該屬性為用于進(jìn)一步篩選該查詢(xún)的過(guò)濾條件。可以為代表額外查詢(xún)條件的字符串或數(shù)組(關(guān)于查詢(xún)條件的格式,請(qǐng)參考 yii\db\Query::where());或者樣式為?function ($query)?的匿名函數(shù),$query參數(shù)為你希望在該函數(shù)內(nèi)進(jìn)行修改的 yii\db\Query 對(duì)象。
  • allowArray:是否允許輸入值為數(shù)組。默認(rèn)為 false。若該屬性為 true 且輸入值為數(shù)組,則數(shù)組的每個(gè)元素都必須在目標(biāo)字段中存在。值得注意的是,若用吧?targetAttribute?設(shè)為多元素?cái)?shù)組來(lái)驗(yàn)證被測(cè)值在多字段中的存在性時(shí),該屬性不能設(shè)置為 true。

譯注:exist?和?unique?驗(yàn)證器的機(jī)理和參數(shù)都相似,有點(diǎn)像一體兩面的陰和陽(yáng)。

  • 他們的區(qū)別是 exist 要求?targetAttribute?鍵所代表的的屬性在其值所代表字段中找得到;而 unique 正相反,要求鍵所代表的的屬性不能在其值所代表字段中被找到。
  • 從另一個(gè)角度來(lái)理解:他們都會(huì)在驗(yàn)證的過(guò)程中執(zhí)行數(shù)據(jù)庫(kù)查詢(xún),查詢(xún)的條件即為where $v=$k (假設(shè)?targetAttribute?的其中一對(duì)鍵值對(duì)為?$k => $v)。unique 要求查詢(xún)的結(jié)果數(shù)?$count==0,而 exist 則要求查詢(xún)的結(jié)果數(shù)?$count>0
  • 最后別忘了,unique 驗(yàn)證器不存在?allowArray?屬性哦。

yii\validators\FileValidator

[
    // 檢查 "primaryImage" 是否為 PNG, JPG 或 GIF 格式的上傳圖片。
    // 文件大小必須小于  1MB
    ['primaryImage', 'file', 'extensions' => ['png', 'jpg', 'gif'], 'maxSize' => 1024*1024*1024],
]

該驗(yàn)證器檢查輸入值是否為一個(gè)有效的上傳文件。

  • extensions:可接受上傳的文件擴(kuò)展名列表。它可以是數(shù)組,也可以是用空格或逗號(hào)分隔各個(gè)擴(kuò)展名的字符串 (e.g. "gif, jpg")。 擴(kuò)展名大小寫(xiě)不敏感。默認(rèn)為 null,意味著所有擴(kuò)展名都被接受。
  • mimeTypes:可接受上傳的 MIME 類(lèi)型列表。它可以是數(shù)組,也可以是用空格或逗號(hào)分隔各個(gè) MIME 的字符串 (e.g. "image/jpeg, image/png")。 Mime 類(lèi)型名是大小寫(xiě)不敏感的。默認(rèn)為 null,意味著所有 MIME 類(lèi)型都被接受。
  • minSize:上傳文件所需最少多少 Byte 的大小。默認(rèn)為 null,代表沒(méi)有下限。
  • maxSize:上傳文件所需最多多少 Byte 的大小。默認(rèn)為 null,代表沒(méi)有上限。
  • maxFiles:給定特性最多能承載多少個(gè)文件。默認(rèn)為 1,代表只允許單文件上傳。若值大于一,那么輸入值必須為包含最多maxFiles?個(gè)上傳文件元素的數(shù)組。
  • checkExtensionByMimeType:是否通過(guò)文件的 MIME 類(lèi)型來(lái)判斷其文件擴(kuò)展。若由 MIME 判定的文件擴(kuò)展與給定文件的擴(kuò)展不一樣,則文件會(huì)被認(rèn)為無(wú)效。默認(rèn)為 true,代表執(zhí)行上述檢測(cè)。

FileValidator?通常與 yii\web\UploadedFile 共同使用。請(qǐng)參考?文件上傳章節(jié)來(lái)了解有關(guān)文件上傳與上傳文件的檢驗(yàn)的全部?jī)?nèi)容。

yii\validators\FilterValidator

[
    // trim 掉 "username" 和 "email" 輸入
    [['username', 'email'], 'filter', 'filter' => 'trim', 'skipOnArray' => true],

    // 標(biāo)準(zhǔn)化 "phone" 輸入
    ['phone', 'filter', 'filter' => function ($value) {
        // 在此處標(biāo)準(zhǔn)化輸入的電話(huà)號(hào)碼
        return $value;
    }],
]

該驗(yàn)證器并不進(jìn)行數(shù)據(jù)驗(yàn)證。而是,給輸入值應(yīng)用一個(gè)濾鏡,并在檢驗(yàn)過(guò)程之后把它賦值回特性變量。

  • filter:用于定義濾鏡的 PHP 回調(diào)函數(shù)??梢詾槿趾瘮?shù)名,匿名函數(shù),或其他。該函數(shù)的樣式必須是?function ($value) { return $newValue; }。該屬性不能省略,必須設(shè)置。
  • skipOnArray:是否在輸入值為數(shù)組時(shí)跳過(guò)濾鏡。默認(rèn)為 false。請(qǐng)注意如果濾鏡不能處理數(shù)組輸入,你就應(yīng)該把該屬性設(shè)為 true。否則可能會(huì)導(dǎo)致 PHP Error 的發(fā)生。

技巧:如果你只是想要用 trim 處理下輸入值,你可以直接用?trim?驗(yàn)證器的。

yii\validators\ImageValidator

[
    // 檢查 "primaryImage" 是否為適當(dāng)尺寸的有效圖片
    ['primaryImage', 'image', 'extensions' => 'png, jpg',
        'minWidth' => 100, 'maxWidth' => 1000,
        'minHeight' => 100, 'maxHeight' => 1000,
    ],
]

該驗(yàn)證器檢查輸入值是否為代表有效的圖片文件。它繼承自?file?驗(yàn)證器,并因此繼承有其全部屬性。除此之外,它還支持以下為圖片檢驗(yàn)而設(shè)的額外屬性:

  • minWidth:圖片的最小寬度。默認(rèn)為 null,代表無(wú)下限。
  • maxWidth:圖片的最大寬度。默認(rèn)為 null,代表無(wú)上限。
  • minHeight:圖片的最小高度。 默認(rèn)為 null,代表無(wú)下限。
  • maxHeight:圖片的最大高度。默認(rèn)為 null,代表無(wú)上限。

    yii\validators\RangeValidator

[
    // 檢查 "level" 是否為 1、2 或 3 中的一個(gè)
    ['level', 'in', 'range' => [1, 2, 3]],
]

該驗(yàn)證器檢查輸入值是否存在于給定列表的范圍之中。

  • range:用于檢查輸入值的給定值列表。
  • strict:輸入值與給定值直接的比較是否為嚴(yán)格模式(也就是類(lèi)型與值都要相同,即全等)。默認(rèn)為 false。
  • not:是否對(duì)驗(yàn)證的結(jié)果取反。默認(rèn)為 false。當(dāng)該屬性被設(shè)置為 true,驗(yàn)證器檢查輸入值是否不在給定列表內(nèi)。
  • allowArray:是否接受輸入值為數(shù)組。當(dāng)該值為 true 且輸入值為數(shù)組時(shí),數(shù)組內(nèi)的每一個(gè)元素都必須在給定列表內(nèi)存在,否則返回驗(yàn)證失敗。

    yii\validators\NumberValidator

[
    // 檢查 "age" 是否為整數(shù)
    ['age', 'integer'],
]

該驗(yàn)證器檢查輸入值是否為整形。

  • max:上限值(含界點(diǎn))。若不設(shè)置,則驗(yàn)證器不檢查上限。
  • min:下限值(含界點(diǎn))。若不設(shè)置,則驗(yàn)證器不檢查下限。

    yii\validators\RegularExpressionValidator

[
    // 檢查 "username" 是否由字母開(kāi)頭,且只包含單詞字符
    ['username', 'match', 'pattern' => '/^[a-z]\w*$/i']
]

該驗(yàn)證器檢查輸入值是否匹配指定正則表達(dá)式。

  • pattern:用于檢測(cè)輸入值的正則表達(dá)式。該屬性是必須的,若不設(shè)置則會(huì)拋出異常。
  • not:是否對(duì)驗(yàn)證的結(jié)果取反。默認(rèn)為 false,代表輸入值匹配正則表達(dá)式時(shí)驗(yàn)證成功。如果設(shè)為 true,則輸入值不匹配正則時(shí)返回匹配成功。

    yii\validators\NumberValidator

[
    // 檢查 "salary" 是否為數(shù)字
    ['salary', 'number'],
]

該驗(yàn)證器檢查輸入值是否為數(shù)字。他等效于?double?驗(yàn)證器。

  • max:上限值(含界點(diǎn))。若不設(shè)置,則驗(yàn)證器不檢查上限。
  • min:下限值(含界點(diǎn))。若不設(shè)置,則驗(yàn)證器不檢查下限。

    yii\validators\RequiredValidator

[
    // 檢查 "username" 與 "password" 是否為空
    [['username', 'password'], 'required'],
]

該驗(yàn)證器檢查輸入值是否為空,還是已經(jīng)提供了。

  • requiredValue:所期望的輸入值。若沒(méi)設(shè)置,意味著輸入不能為空。
  • strict:檢查輸入值時(shí)是否檢查類(lèi)型。默認(rèn)為 false。當(dāng)沒(méi)有設(shè)置?requiredValue?屬性時(shí),若該屬性為 true,驗(yàn)證器會(huì)檢查輸入值是否嚴(yán)格為 null;若該屬性設(shè)為 false,該驗(yàn)證器會(huì)用一個(gè)更加寬松的規(guī)則檢驗(yàn)輸入值是否為空。

當(dāng)設(shè)置了?requiredValue?屬性時(shí),若該屬性為 true,輸入值與?requiredValue?的比對(duì)會(huì)同時(shí)檢查數(shù)據(jù)類(lèi)型。

補(bǔ)充:如何判斷待測(cè)值是否為空,被寫(xiě)在另外一個(gè)話(huà)題的處理空輸入章節(jié)。

yii\validators\SafeValidator

[
    // 標(biāo)記 "description" 為安全特性
    ['description', 'safe'],
]

該驗(yàn)證器并不進(jìn)行數(shù)據(jù)驗(yàn)證。而是把一個(gè)特性標(biāo)記為安全特性

yii\validators\StringValidator

[
    // 檢查 "username" 是否為長(zhǎng)度 4 到 24 之間的字符串
    ['username', 'string', 'length' => [4, 24]],
]

該驗(yàn)證器檢查輸入值是否為特定長(zhǎng)度的字符串。并檢查特性的值是否為某個(gè)特定長(zhǎng)度。

  • length:指定待測(cè)輸入字符串的長(zhǎng)度限制。該屬性可以被指定為以下格式之一:
    • 證書(shū):the exact length that the string should be of;
    • 單元素?cái)?shù)組:代表輸入字符串的最小長(zhǎng)度 (e.g.?[8])。這會(huì)重寫(xiě)?min?屬性。
    • 包含兩個(gè)元素的數(shù)組:代表輸入字符串的最小和最大長(zhǎng)度(e.g.?[8, 128])。 這會(huì)同時(shí)重寫(xiě)?min?和?max?屬性。
  • min:輸入字符串的最小長(zhǎng)度。若不設(shè)置,則代表不設(shè)下限。
  • max:輸入字符串的最大長(zhǎng)度。若不設(shè)置,則代表不設(shè)上限。
  • encoding:待測(cè)字符串的編碼方式。若不設(shè)置,則使用應(yīng)用自身的 yii\base\Application::charset 屬性值,該值默認(rèn)為?UTF-8

    yii\validators\FilterValidator

[
    // trim 掉 "username" 和 "email" 兩側(cè)的多余空格
    [['username', 'email'], 'trim'],
]

該驗(yàn)證器并不進(jìn)行數(shù)據(jù)驗(yàn)證。而是,trim 掉輸入值兩側(cè)的多余空格。注意若該輸入值為數(shù)組,那它會(huì)忽略掉該驗(yàn)證器。

yii\validators\UniqueValidator

[
    // a1 需要在 "a1" 特性所代表的字段內(nèi)唯一
    ['a1', 'unique'],

    // a1 需要唯一,但檢驗(yàn)的是 a1 的值在字段 a2 中的唯一性
    ['a1', 'unique', 'targetAttribute' => 'a2'],

    // a1 和 a2 的組合需要唯一,且它們都能收到錯(cuò)誤提示
    [['a1', 'a2'], 'unique', 'targetAttribute' => ['a1', 'a2']],

    // a1 和 a2 的組合需要唯一,只有 a1 能接收錯(cuò)誤提示
    ['a1', 'unique', 'targetAttribute' => ['a1', 'a2']],

    // 通過(guò)同時(shí)在 a2 和 a3 字段中檢查 a2 和 a3 的值來(lái)確定 a1 的唯一性
    ['a1', 'unique', 'targetAttribute' => ['a2', 'a1' => 'a3']],
]

該驗(yàn)證器檢查輸入值是否在某表字段中唯一。它只對(duì)活動(dòng)記錄類(lèi)型的模型類(lèi)特性起作用,能支持對(duì)一個(gè)或多過(guò)字段的驗(yàn)證。

  • targetClass:用于查找輸入值的目標(biāo)?AR?類(lèi)。若不設(shè)置,則會(huì)使用正在進(jìn)行驗(yàn)證的當(dāng)前模型類(lèi)。
  • targetAttribute:用于檢查輸入值唯一性的?targetClass?的模型特性。
    • 若不設(shè)置,它會(huì)直接使用待測(cè)特性名(整個(gè)參數(shù)數(shù)組的首元素)。
    • 除了指定為字符串以外,你也可以用數(shù)組的形式,同時(shí)指定多個(gè)用于驗(yàn)證的表字段,數(shù)組的鍵和值都是代表字段的特性名,值表示?targetClass?的待測(cè)數(shù)據(jù)源字段,而鍵表示當(dāng)前模型的待測(cè)特性名。
    • 若鍵和值相同,你可以只指定值。(如:['a2']?就代表?['a2'=>'a2']
  • filter:用于檢查輸入值唯一性必然會(huì)進(jìn)行數(shù)據(jù)庫(kù)查詢(xún),而該屬性為用于進(jìn)一步篩選該查詢(xún)的過(guò)濾條件??梢詾榇眍~外查詢(xún)條件的字符串或數(shù)組(關(guān)于查詢(xún)條件的格式,請(qǐng)參考 yii\db\Query::where());或者樣式為?function ($query)?的匿名函數(shù),$query參數(shù)為你希望在該函數(shù)內(nèi)進(jìn)行修改的 yii\db\Query 對(duì)象。

譯注:exist?和?unique?驗(yàn)證器的機(jī)理和參數(shù)都相似,有點(diǎn)像一體兩面的陰和陽(yáng)。

  • 他們的區(qū)別是 exist 要求?targetAttribute?鍵所代表的的屬性在其值所代表字段中找得到;而 unique 正相反,要求鍵所代表的的屬性不能在其值所代表字段中被找到。
  • 從另一個(gè)角度來(lái)理解:他們都會(huì)在驗(yàn)證的過(guò)程中執(zhí)行數(shù)據(jù)庫(kù)查詢(xún),查詢(xún)的條件即為where $v=$k (假設(shè)?targetAttribute?的其中一對(duì)鍵值對(duì)為?$k => $v)。unique 要求查詢(xún)的結(jié)果數(shù)?$count==0,而 exist 則要求查詢(xún)的結(jié)果數(shù)?$count>0
  • 最后別忘了,unique 驗(yàn)證器不存在?allowArray?屬性哦。

yii\validators\UrlValidator

[
    // 檢查 "website" 是否為有效的 URL。若沒(méi)有 URI 方案,則給 "website" 特性加 "http://" 前綴
    ['website', 'url', 'defaultScheme' => 'http'],
]

該驗(yàn)證器檢查輸入值是否為有效 URL。

  • validSchemes:用于指定那些 URI 方案會(huì)被視為有效的數(shù)組。默認(rèn)為?['http', 'https'],代表?http?和?https?URLs 會(huì)被認(rèn)為有效。
  • defaultScheme:若輸入值沒(méi)有對(duì)應(yīng)的方案前綴,會(huì)使用的默認(rèn) URI 方案前綴。默認(rèn)為 null,代表不修改輸入值本身。
  • enableIDN:驗(yàn)證過(guò)程是否應(yīng)該考慮 IDN(internationalized domain names,國(guó)際化域名,也稱(chēng)多語(yǔ)種域名,比如中文域名)。默認(rèn)為 false。要注意但是為使用 IDN 驗(yàn)證功能,請(qǐng)先確保安裝并開(kāi)啟?intl?PHP 擴(kuò)展,不然會(huì)導(dǎo)致拋出異常。
以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)