亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

?? ??? ??
閱讀前篇 簡(jiǎn)介 Yii 是什么 從 Yii 1.1 升級(jí) 入門 安裝 Yii 運(yùn)行應(yīng)用 第一次問(wèn)候 使用Forms 數(shù)據(jù)庫(kù)應(yīng)用 使用 Gii 生成代碼 進(jìn)階 應(yīng)用結(jié)構(gòu) 概述 入口腳本 應(yīng)用(Applications) 應(yīng)用組件(Application Components) 控制器(Controllers) 模型(Models) 視圖(views) 模塊(Modules) 過(guò)濾器(Filters) 小部件(Widgets) 前端資源(Assets) 擴(kuò)展(Extensions) 請(qǐng)求處理 運(yùn)行概述 啟動(dòng)引導(dǎo)(Bootstrapping) 路由和創(chuàng)建URL 請(qǐng)求(Requests) 響應(yīng)(Responses) Sessions 和 Cookies 錯(cuò)誤處理(Handling Errors) 日志(Logging) 關(guān)鍵概念 組件(Component) 屬性(Property) 事件(Events) 行為(Behaviors) 配置(Configurations) 別名(Aliases) 類自動(dòng)加載(Autoloading) 服務(wù)定位器(Service Locator) 依賴注入容器(Dependency Injection Container) 配合數(shù)據(jù)庫(kù)工作 數(shù)據(jù)庫(kù)訪問(wèn) (Data Access Objects) 查詢生成器(Query Builder) 活動(dòng)記錄(Active Record) 數(shù)據(jù)庫(kù)遷移(Migrations) Sphinx Redis MongoDB Elasticsearch 接收用戶數(shù)據(jù) 創(chuàng)建表單(Creating Forms) 輸入驗(yàn)證(Validating Input) 文件上傳(Uploading Files) 收集列表輸入(Collecting Tabular Input) 多模型的復(fù)合表單(Getting Data for Multiple Models) 顯示數(shù)據(jù) 格式化輸出數(shù)據(jù)(Data Formatting) 分頁(yè)(Pagination) 排序(Sorting) 數(shù)據(jù)提供器(Data Providers) 數(shù)據(jù)小部件(Data Widgets) 客戶端腳本使用(Working with Client Scripts) 主題(Theming) 安全 認(rèn)證(Authentication) 授權(quán)(Authorization) 處理密碼(Working with Passwords) 客戶端認(rèn)證(Auth Clients) 最佳安全實(shí)踐(Best Practices) 緩存 概述 數(shù)據(jù)緩存 片段緩存 頁(yè)面緩存 HTTP 緩存 RESTfull Web服務(wù) 快速入門(Quick Start) 資源(Resources) 控制器(Controllers) 路由(Routing) 格式化響應(yīng)(Response Formatting) 授權(quán)認(rèn)證(Authentication) 速率限制(Rate Limiting) 版本(Versioning) 錯(cuò)誤處理(Error Handling) 開(kāi)發(fā)工具 調(diào)試工具欄和調(diào)試器 使用Gii生成代碼 生成API文檔 測(cè)試 概述(Overview) 配置測(cè)試環(huán)境(Testing environment setup) 單元測(cè)試(Unit Tests) 功能測(cè)試(Function Tests) 驗(yàn)收測(cè)試(Acceptance Tests) 測(cè)試夾具(Fixtures) 高級(jí)專題 高級(jí)應(yīng)用模板 創(chuàng)建自定義應(yīng)用程序結(jié)構(gòu) 控制臺(tái)命令 核心驗(yàn)證器(Core Validators) 國(guó)際化 收發(fā)郵件 性能優(yōu)化 共享主機(jī)環(huán)境 模板引擎 集成第三方代碼 小部件 Bootstrap 小部件 Jquery UI 助手類 概述 Array 助手(ArrayHelper) Html 助手(Html) Url 助手(Url)
??

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

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

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

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

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

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

yii\validators\BooleanValidator

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

    // 檢查 "deleted" 是否為布爾類型,即 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ù)都是字符串類型,所以一般情況下你都需要保持 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ì)是否要求大小寫敏感。默認(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:用于與原特性相比較的特性名稱。當(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í),該屬性優(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è)值是否為空,被寫在另外一個(gè)話題的處理空輸入章節(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:檢查是否允許帶名稱的電子郵件地址 (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ó)際化域名,也稱多語(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)記錄類型的模型類特性起作用,能支持對(duì)一個(gè)或多過(guò)字段的驗(yàn)證。

  • targetClass:用于查找輸入值的目標(biāo)?AR?類。若不設(shè)置,則會(huì)使用正在進(jìn)行驗(yàn)證的當(dāng)前模型類。
  • 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ù)查詢,而該屬性為用于進(jìn)一步篩選該查詢的過(guò)濾條件??梢詾榇眍~外查詢條件的字符串或數(shù)組(關(guā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ù)查詢,查詢的條件即為where $v=$k (假設(shè)?targetAttribute?的其中一對(duì)鍵值對(duì)為?$k => $v)。unique 要求查詢的結(jié)果數(shù)?$count==0,而 exist 則要求查詢的結(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ò)展名大小寫不敏感。默認(rèn)為 null,意味著所有擴(kuò)展名都被接受。
  • mimeTypes:可接受上傳的 MIME 類型列表。它可以是數(shù)組,也可以是用空格或逗號(hào)分隔各個(gè) MIME 的字符串 (e.g. "image/jpeg, image/png")。 Mime 類型名是大小寫不敏感的。默認(rèn)為 null,意味著所有 MIME 類型都被接受。
  • 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)判斷其文件擴(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)化輸入的電話號(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)格模式(也就是類型與值都要相同,即全等)。默認(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í)是否檢查類型。默認(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ù)類型。

補(bǔ)充:如何判斷待測(cè)值是否為空,被寫在另外一個(gè)話題的處理空輸入章節(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)度限制。該屬性可以被指定為以下格式之一:
    • 證書:the exact length that the string should be of;
    • 單元素?cái)?shù)組:代表輸入字符串的最小長(zhǎng)度 (e.g.?[8])。這會(huì)重寫?min?屬性。
    • 包含兩個(gè)元素的數(shù)組:代表輸入字符串的最小和最大長(zhǎng)度(e.g.?[8, 128])。 這會(huì)同時(shí)重寫?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)記錄類型的模型類特性起作用,能支持對(duì)一個(gè)或多過(guò)字段的驗(yàn)證。

  • targetClass:用于查找輸入值的目標(biāo)?AR?類。若不設(shè)置,則會(huì)使用正在進(jìn)行驗(yàn)證的當(dāng)前模型類。
  • 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ù)查詢,而該屬性為用于進(jìn)一步篩選該查詢的過(guò)濾條件??梢詾榇眍~外查詢條件的字符串或數(shù)組(關(guā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ù)查詢,查詢的條件即為where $v=$k (假設(shè)?targetAttribute?的其中一對(duì)鍵值對(duì)為?$k => $v)。unique 要求查詢的結(jié)果數(shù)?$count==0,而 exist 則要求查詢的結(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ó)際化域名,也稱多語(yǔ)種域名,比如中文域名)。默認(rèn)為 false。要注意但是為使用 IDN 驗(yàn)證功能,請(qǐng)先確保安裝并開(kāi)啟?intl?PHP 擴(kuò)展,不然會(huì)導(dǎo)致拋出異常。
?? ??: ?? ??: