Yii2——字段校驗(yàn)-創(chuàng)新互聯(lián)

1.1  字段校驗(yàn)

1.1.1  簡(jiǎn)介

開(kāi)發(fā)Web應(yīng)用有一個(gè)很重要的原則,就是不要相信任何輸入的數(shù)據(jù),在使用之前必須要進(jìn)行有效性檢查,否則很有可能會(huì)引發(fā)各種安全性問(wèn)題。Yii 2當(dāng)然也不會(huì)忽略這個(gè)問(wèn)題,提供了校驗(yàn)器這一有力的工具,該工具可同時(shí)提供客戶端和服務(wù)器端的數(shù)據(jù)校驗(yàn)。

創(chuàng)新互聯(lián)公司長(zhǎng)期為近1000家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為盧龍企業(yè)提供專(zhuān)業(yè)的網(wǎng)站制作、成都網(wǎng)站建設(shè),盧龍網(wǎng)站改版等技術(shù)服務(wù)。擁有10年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。

1.1.2  使用方法

在Model內(nèi),重載rules()接口,配置每個(gè)字段的規(guī)則,如下(以LoginForm為例):

public functionrules()
 {
    return[
         // username and password are both required
         [['username', 'password'], 'required'],
         // rememberMe must be a boolean value
         ['rememberMe', 'boolean'],
         // password is validated by validatePassword()
         ['password', 'validatePassword'],
     ];
 }

每一行中,前面是字段名稱(chēng),最后一個(gè)元素是規(guī)則的名稱(chēng)。這些規(guī)則最終是通過(guò)“校驗(yàn)器”來(lái)完成校驗(yàn)的。當(dāng)然內(nèi)置的校驗(yàn)器肯定不能夠全部滿足需求,因此Yii 2在根據(jù)規(guī)則名稱(chēng)創(chuàng)建校驗(yàn)器的時(shí)候,會(huì)首先檢查該Model中是否有跟規(guī)則名稱(chēng)相同的函數(shù),如果有,則校驗(yàn)規(guī)則的時(shí)候就直接用該函數(shù)來(lái)完成校驗(yàn),譬如上面代碼中的“validatePassword”規(guī)則,在LoginForm中就有接口:

public functionvalidatePassword($attribute, $params)
 {
    if(!$this->hasErrors()) {
         $user = $this->getUser();
        if(!$user || !$user->validatePassword($this->password)) {
             $this->addError($attribute, '賬號(hào)或密碼輸入錯(cuò)誤。');
         }
     }
 }

1.1.3  內(nèi)置校驗(yàn)器

Yii 2中,校驗(yàn)器存放于vendor\yiisoft\yii2\validators目錄下,有如下內(nèi)置校驗(yàn)器(這些校驗(yàn)器沒(méi)有全部都用過(guò),這里列出來(lái)功能,細(xì)節(jié)待用到的時(shí)候再研究):

boolean

檢測(cè)輸入值是否為boolean類(lèi)型

captcha

檢測(cè)輸入的校驗(yàn)碼是否正確,這個(gè)需要與yii\captcha\CaptchaAction一起使用

compare

與指定值進(jìn)行比較,確認(rèn)兩者是否符合比較條件(如:>=、=、<=),譬如注冊(cè)時(shí)會(huì)要求輸入兩次密碼,要比較這兩次輸入的密碼是否相同

date

檢測(cè)輸入值是否為date類(lèi)型

datetime

檢測(cè)輸入值是否為datetime類(lèi)型

time

檢測(cè)輸入值是否為time類(lèi)型

default

這個(gè)實(shí)際上不是一個(gè)校驗(yàn)器,是當(dāng)某個(gè)屬性為空時(shí),提供默認(rèn)值用的

double

檢測(cè)輸入值是否為double類(lèi)型

each

對(duì)輸入的一組數(shù)據(jù)進(jìn)行校驗(yàn)

email

檢測(cè)輸入值是否為email地址

exist

判斷輸入的值是否在數(shù)據(jù)庫(kù)中存在,常用于檢查某個(gè)值在外鍵中是否存在

file

檢測(cè)輸入值是否為文件

filter

將輸入值轉(zhuǎn)換為另一個(gè)值,它實(shí)際上不是個(gè)校驗(yàn)器。

p_w_picpath

檢測(cè)輸入值是否為圖片

in

檢測(cè)輸入值是否在指定的列表中

integer

檢測(cè)輸入值是否為integer類(lèi)型

match

使用正則表達(dá)式檢查輸入值

required

檢測(cè)輸入值是否為空

safe

標(biāo)志輸入的字段是否可信,Yii對(duì)Model的每個(gè)字段都要求必須要有校驗(yàn)器,但是有時(shí)候有些字段的確不需要,譬如主鍵ID。

string

檢測(cè)輸入值是否為string類(lèi)型

trim

這實(shí)際上是一個(gè)轉(zhuǎn)換器,去除掉輸入的前后空格

unique

檢測(cè)輸入值在表中是否唯一

url

檢測(cè)輸入值是否為URL

ip

檢測(cè)輸入值是否為IP地址

1.1.4  自定義校驗(yàn)器

參考文獻(xiàn):

1、http://www.cnblogs.com/yhdsir/p/5181938.html

新建一個(gè)文件:

?php

namespace common\helps;

use yii\validators\Validator;

class ArrayValidator extends Validator

{

   publicfunction validateAttribute($model, $attribute)

   {

       if (!is_array($model->$attribute)) {

           $this->addError($model, $attribute, $attribute . '必須是一個(gè)數(shù)組');

       }

   }

}

                           Yii 2 —— 字段校驗(yàn)

使用的時(shí)候:

Yii 2 —— 字段校驗(yàn)

publicfunction rules()

{

   return [

       ...

       ['kind_ids','common\helps\ArrayValidator'], // 自定義驗(yàn)證

       ...

   ];

}

創(chuàng)新互聯(lián)www.cdcxhl.cn,專(zhuān)業(yè)提供香港、美國(guó)云服務(wù)器,動(dòng)態(tài)BGP最優(yōu)骨干路由自動(dòng)選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動(dòng)現(xiàn)已開(kāi)啟,新人活動(dòng)云服務(wù)器買(mǎi)多久送多久。

標(biāo)題名稱(chēng):Yii2——字段校驗(yàn)-創(chuàng)新互聯(lián)
網(wǎng)站URL:http://bm7419.com/article10/cecido.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)移動(dòng)網(wǎng)站建設(shè)、軟件開(kāi)發(fā)網(wǎng)站收錄、品牌網(wǎng)站制作企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

微信小程序開(kāi)發(fā)