校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > Yii2框架數(shù)據(jù)驗證操作實例詳解

Yii2框架數(shù)據(jù)驗證操作實例詳解

熱門標簽:福建銀行智能外呼系統(tǒng)價格 四川保險智能外呼系統(tǒng)供應(yīng)商 遼寧ai電銷機器人價格 寧波外呼營銷系統(tǒng) 長沙做地圖標注公司 上海做外呼線路的通信公司 地圖標注專員怎么樣 電話機器人銷售主要負責(zé)什么 房產(chǎn)中介用的是什么外呼系統(tǒng)

本文實例講述了Yii2框架數(shù)據(jù)驗證操作。分享給大家供大家參考,具體如下:

一、場景

什么情況下需要使用場景呢?當(dāng)一個模型需要在不同情境中使用時,若不同情境下需要的數(shù)據(jù)表字段和數(shù)據(jù)驗證規(guī)則有所不同,則需要定義多個場景來區(qū)分不同使用情境。例如,用戶注冊的時候需要填寫email,登錄的時候則不需要,這時就需要定義兩個不同場景加以區(qū)分。

默認情況下模型的場景是由rules()方法申明的驗證規(guī)則中使用到的場景決定的,也可以通過覆蓋scenarios()方法來更具體地定義模型的所有場景,例如:

public function scenarios() {
    return [
      'signup' => ['username', 'email', 'password', 'conpassword', 'verifyCode', 'reg_time', 'log_time'],
      'login' => ['username', 'password', 'verifyCode', 'rememberMe', 'log_time']
    ];
}

其中鍵為場景名稱,值為該場景下使用的模型屬性(稱為活動屬性)。

指定模型場景有以下兩種方法:

方法一:

$model = new User();
$model->scenario = 'signup';

方法二:

$model = new User(['scenario' => 'signup']);

可以通過指定驗證規(guī)則中的'on'屬性來申明一條驗證規(guī)則適用的場景:

['email', 'required', 'on' => 'signup']

場景主要用于模型屬性塊賦值和數(shù)據(jù)驗證。調(diào)用模型類的load()方法進行塊賦值的時候,只有當(dāng)前場景對應(yīng)使用的屬性會被賦值,調(diào)用模型類的validate()方法進行數(shù)據(jù)驗證的時候,只有當(dāng)前場景屬性相關(guān)的且適用于當(dāng)前場景的驗證規(guī)則會被執(zhí)行。

二、驗證規(guī)則

Yii模型類通過實現(xiàn)rules()方法申明使用的所有驗證規(guī)則,示例:

public function rules() {
    return [
      [['username', 'password'], 'required'],
      ['email', 'email', 'on' => 'signup']
    ];
}

一條規(guī)則可適用于一個或多個場景,一條規(guī)則可用來驗證一個或多個屬性,一個屬性可對應(yīng)一條或多條驗證規(guī)則。如果沒有指定'on'屬性,驗證規(guī)則會在所有場景下使用。

所有的驗證規(guī)則都可以通過設(shè)置'message'屬性來自定義錯誤信息,而且在錯誤信息內(nèi)容中可以通過{attribute}來引用當(dāng)前屬性標簽名稱(屬性標簽名稱需要在模型的attributeLabels()方法設(shè)置),通過{value}來引用當(dāng)前屬性的輸入值,例如:

['username', 'unique', 'on' => 'register', 'message' => '{attribute}"{value}"已被占用!', 'on' => 'signup']//注冊時用戶名唯一

yii驗證的使用方式有以下三種:

1. 客戶端驗證:

Yii默認開啟客戶端驗證,可以通過設(shè)置enableClientValidation參數(shù)為true開啟,開啟之后ActiveForm會讀取模型中申明的驗證規(guī)則生成相應(yīng)的Javascript驗證代碼。enableClientValidation參數(shù)設(shè)置的方式有三種:

(1)在視圖文件ActiveForm中對整個form進行設(shè)置:

?php
$form = ActiveForm::begin([
  'enableClientValidation' =>true
]);
?>

(2)在視圖文件ActiveField中對單個field進行設(shè)置:

復(fù)制代碼 代碼如下:
?= $form->field($model, 'username', ['enableClientValidation'=>false])->label('用戶名') ?>

(3)在AR類的rules()函數(shù)中設(shè)置:
['username', 'yii\validators\StringValidator', 'min' => 3, 'max' => 30, 'enableClientValidation' => true, 'on' => 'register']

優(yōu)先級:(2)>(1)>(3)

2. 服務(wù)器端驗證:

(1)validate()

模型validate()方法會根據(jù)rules()方法中定義的驗證規(guī)則對所有數(shù)據(jù)進行驗證,驗證通過返回true,否則將錯誤保存在yii\base\Model::errors屬性中并返回false。

(2)save()

模型save()方法中默認調(diào)用validate()方法進行數(shù)據(jù)驗證,驗證通過則直接進行數(shù)據(jù)庫操作,返回true,否則不進行數(shù)據(jù)庫操作,返回false,將錯誤信息存儲在yii\base\Model::errors屬性中。若已顯式調(diào)用過validate(),可以通過傳參避免在save()方法中重復(fù)驗證數(shù)據(jù):save(false)。

3. Ajax驗證:

Yii默認關(guān)閉ajax驗證,可以通過配置enableAjaxValidation參數(shù)為true開啟。

客戶端設(shè)置(兩種方式):

(1)在視圖文件ActiveForm中對整個form進行設(shè)置:

?php
$form = ActiveForm::begin([
  'enableAjaxValidation' =>true
]);
?>

(2)在視圖文件ActiveField中對單個field進行設(shè)置:

復(fù)制代碼 代碼如下:
?= $form->field($model, 'username', ['enableAjaxValidation'=>false])->label('用戶名') ?>

優(yōu)先級:(2)>(1)

服務(wù)器端處理:

if(Yii::$app->request->isAjax) {
    $res = \yii\bootstrap\ActiveForm::validate($model);
    Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
    return $res;
}

注:有些驗證規(guī)則無法使用客戶端驗證,如:unique、exist等。

三、yii核心驗證器

Yii提供了一些核心驗證器,可以直接使用,申明格式如下:

['屬性名', '驗證器名稱/類名', ...(一些額外參數(shù)設(shè)置)]

了解并使用yii的核心驗證器會讓開發(fā)變得簡單許多。下面簡單對yii核心驗證器進行分類介紹。

1. 不進行數(shù)據(jù)驗證的驗證器

(1)safe:而是把一個屬性標記為安全屬性。

['desc', 'safe']

(2)default:給值為空的屬性設(shè)置默認值。

['add_time', 'default', 'value' => time()]

(3)trim:去除輸入值首尾兩側(cè)多余空格。

['username', 'trim']

(4)filter:濾鏡,對數(shù)據(jù)進行格式化或一些其他處理后返回。

['phone', 'filter', 'filter' => function($value) {
         ....return $value;
}]

filter: 用于定義濾鏡的php回調(diào)函數(shù),可以為全局函數(shù)名,匿名函數(shù)或其他。
skipOnArray:是否在輸入為數(shù)組時跳過濾鏡,默認為false。如果濾鏡不能處理數(shù)組輸入,應(yīng)該設(shè)置為true。

2. 數(shù)據(jù)類型驗證器

(1)boolean:布爾型。

['del', 'boolean', 'trueValue' => true, 'falseValue' => false, 'strict' => true]

trueValue:代表真的值,默認為1。
falseValue:代表假的值,默認為0。
strict:是否要求輸入數(shù)據(jù)必須嚴格匹配trueValue或falseValue。默認為false。

(2)number:數(shù)字。

['salary', 'number']

(3)double:雙精度浮點型,等效于number驗證器。

['salary','double', 'max' => 99.99, 'min' => 0]

(4)integer:整數(shù)。

['age', 'integer']

注:number、double、integer驗證器都可以設(shè)置min、max參數(shù)來限制數(shù)字的最大、最小值(含界點)。

(5)string:字符串。

['username', 'string', 'length' => [3, 30]]

length:指定輸入字符串的長度限制。
min:字符串最小長度。
max:字符串最大長度。
encoding:字符串的編碼方式,不設(shè)置則使用應(yīng)用自身的charset屬性值。默認為utf-8。

3. 數(shù)據(jù)格式驗證器

(1)date:日期。

['time', 'date', 'format' => 'php:Y:m:d', 'timestampAttribute' => 'startTime']

format:時間格式,默認為“y-m-d”。
timestampAttribute:將時間轉(zhuǎn)化為時間戳并賦值給某個屬性。

(2)email:驗證是否符合郵箱地址格式。

['emailAddr', 'email']

(3)ip:驗證是否為有效IP地址。

['ip_address', 'ip']

(4)url:網(wǎng)址。

['website', 'url', 'defaultScheme' => 'http']

validSchemes:用于指定哪些URI方案會被視為有效,默認為['http', 'https']。
defaultScheme:若輸入值沒有對應(yīng)的方案前綴,會使用的默認URI方案前綴。

(5)match:輸入值是否滿足某個正則表達式。

['username', 'match', 'pattern' => '/^[a-z]\w*$/i']

pattern:正則表達式。
not:是否對驗證結(jié)果取反。

4. 數(shù)據(jù)值驗證器

(1)required:必填。

[['username', 'password'], 'required']

requiredValue:所期望的值,若沒設(shè)置則輸入不能為空。
strict:檢查輸入值時是否檢查類型。

(2)captcha:驗證碼。

['verifyCode', 'captcha', 'caseSensitive' => true, 'captchaAction' => 'site/captcha', 'skipOnEmpty' => false]

caseSensitive:是否大小寫敏感,默認為false。
captchaAction:指向用于渲染驗證碼圖片的captcha方法的路由,默認為'site/captcha'。
skipOnEmpty:輸入為空時是否跳過驗證,默認為false。

(3)compare:比較。

['password', 'compare', 'compareAttribute' => 'conpassword', 'operator' => '==']

compareAttribute:與指定屬性值比較的屬性名稱。
compareValue:與某個常量值比較。
operator:比較操作符。

其中compareAttribute默認在驗證屬性后面加后綴“_repeat”作為另一個比較屬性的名稱,operator默認為“==”,即:['password', 'compare']規(guī)則表示驗證password與password_repeat的值是否相等。

(4)each:驗證數(shù)組。

['ids', 'each', 'rule' => ['integer']]

(驗證數(shù)組ids中的每個元素是否都是int類型數(shù)據(jù))
rule:定義驗證每一個數(shù)組元素的驗證規(guī)則。
allowMessageFromRule:是否使用rule中指定的多個驗證規(guī)則報錯信息,默認為true,若設(shè)置為false,則使用“message”參數(shù)值作為錯誤信息。

注:若輸入值不是數(shù)組則會報錯

(5)exist:存在性。

['cid', 'exist', 'targetClass' => 'app\models\Category', 'targetAttribute' => 'id']

(cid的值是否在AR類對應(yīng)的id屬性中存在,使用場景:當(dāng)前AR模型關(guān)聯(lián)的數(shù)據(jù)表的cid字段和Category模型關(guān)聯(lián)的數(shù)據(jù)表的id字段相關(guān)聯(lián),所以使用該驗證規(guī)則驗證cid字段的值能否在關(guān)聯(lián)的另一個數(shù)據(jù)表中找到對應(yīng)記錄)
targetClass:用于查找輸入值的目標AR類。
targetAttribute:用于查找輸入值的目標屬性名稱。
filter:檢查屬性值存在性需要進行數(shù)據(jù)庫查詢,該參數(shù)設(shè)置查詢的過濾條件。可以設(shè)置為查詢條件的字符串或數(shù)組,或者function($query)匿名函數(shù)。
allowArray:是否允許輸入值為數(shù)組,默認為false。若設(shè)置為true,則數(shù)組的每個元素都必須在目標字段中存在。若把targetAttribute設(shè)置為多元素數(shù)組來驗證被測值在多字段中的存在性時,該屬性不能設(shè)置為true。

(6)unique:唯一性。

['email', 'unique', 'targetClass' => 'app\models\User', 'message' => '{attribute}"{value}"已被注冊!', 'on' => 'signup']
除了沒有allowArray屬性,其他屬性都和exist驗證器一樣。

(7)in:范圍。

['sex', 'in', 'range' => [0, 1, 2]]

range:范圍值列表。
strict:是否使用嚴格模式(類型與值都要相同)。
not:是否對驗證的結(jié)果取反,默認為false。
allowArray:是否接受輸入數(shù)組,默認為false。

5. 文件驗證器

(1)file:文件。

['pcImg', 'file', 'extensions' => ['png', 'jpg', 'gif'], 'maxSize' => 1024*1024]

extensions:可接受上傳的文件擴展名列表。
mimeTypes:可接受上傳的MIME類型列表。
minSize:文件大小下限。
maxSize:文件大小上限。
maxFiles:上傳文件個數(shù)上限,默認為1。設(shè)置為大于1時輸入值必須為數(shù)組。
checkExtensionByMimeType:是否通過文件的MIME類型來判斷文件擴展,默認為true。

(2)image:圖片。

['mbImg', 'image' extensions => 'png, ipg', 'minWidth' => 100, 'minHeight' => 100]

該驗證器繼承自file驗證器,并支持額外屬性minWidth、maxWidth、minHeight、maxHeight來設(shè)置圖片的最小、最大寬度和最小、最大高度。

四、其他驗證器

1. 條件式驗證:

['state', 'required', 'when' => function($model) {//只在country屬性值為'USA'的時候state屬性值才不能為空
     return $model->country=='USA';
}]

注:若需要支持客戶端驗證,則要配置'whenClient'屬性。

1. 自定義驗證器:

(1)行內(nèi)驗證器:一種以模型方法或匿名函數(shù)的形式定義的驗證器。

示例:

['conpassword', function($attribute, $params) {
     if($this->$attribute != $this->newpassword) {
        $this->addError($attribute, '確認密碼和新密碼不一致!');
    }
}]。

(當(dāng)然這里也可以使用yii核心驗證器'compare'來實現(xiàn))

注:行內(nèi)驗證器不支持客戶端驗證。

(2)獨立驗證器:

獨立驗證器是繼承自yii\validators\Validator或其子類的類,可以通過重寫validateAttribute()方法來實現(xiàn)驗證規(guī)則,若驗證失敗,可以調(diào)用yii\base\Model::addError()方法來保存錯誤信息到模型內(nèi)。

獨立驗證器示例:

namespace app\components;
use yii\validators\Validator;
class ConpasswordValidator extends Validator {
     public function init() {
         parent::init();
         $this->message = '確認密碼和密碼不一致!';
     }
     //服務(wù)器端驗證
     public function validateAttribute($model, $attribute) {
         if($model->conpassword !== $model->password) {
              $model->addError($attribute, $this->message);
         }
     }
     //客戶端驗證
     public function clientValidateAttribute($model, $attribute, $view) {
         $conpassword = json_encode($model->conpassword);
         $message = json_encode($this->message, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
     return JS
if(value != $conpassword) {
     message.push($message);
}
JS;
         return false;
     }
}

模型中使用示例:

['conpassword', 'app\components\ConpasswordValidator']

最后要注意,驗證規(guī)則申明的先后順序?qū)︱炞C結(jié)果也是有影響的!

更多關(guān)于Yii相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Yii框架入門及常用技巧總結(jié)》、《php優(yōu)秀開發(fā)框架總結(jié)》、《smarty模板入門基礎(chǔ)教程》、《php面向?qū)ο蟪绦蛟O(shè)計入門教程》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》

希望本文所述對大家基于Yii框架的PHP程序設(shè)計有所幫助。

您可能感興趣的文章:
  • Yii基于CActiveForm的Ajax數(shù)據(jù)驗證用法示例
  • Yii框架數(shù)據(jù)模型的驗證規(guī)則rules()被執(zhí)行的方法
  • Yii數(shù)據(jù)模型中rules類驗證器用法分析
  • yii2中的rules 自定義驗證規(guī)則詳解
  • 在yii中新增一個用戶驗證的方法詳解
  • PHP YII框架開發(fā)小技巧之模型(models)中rules自定義驗證規(guī)則
  • Yii使用Captcha驗證碼的方法
  • yii2 modal彈窗之ActiveForm ajax表單異步驗證
  • PHP Yii框架之表單驗證規(guī)則大全
  • Yii2驗證器(Validator)用法分析
  • 詳解Yii2 rules 的驗證規(guī)則

標簽:深圳 澳門 延安 工商登記 宿遷 常德 佛山 宜春

巨人網(wǎng)絡(luò)通訊聲明:本文標題《Yii2框架數(shù)據(jù)驗證操作實例詳解》,本文關(guān)鍵詞  Yii2,框架,數(shù)據(jù),驗證,操作,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Yii2框架數(shù)據(jù)驗證操作實例詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于Yii2框架數(shù)據(jù)驗證操作實例詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    久久久三级国产网站| 成人av午夜影院| 国产欧美日韩另类一区| 91在线视频播放| 国产综合色视频| 一区二区三区四区在线播放 | 一区二区三区欧美激情| 2024国产精品视频| 911精品国产一区二区在线| 成人aaaa免费全部观看| 久久www免费人成看片高清| 一片黄亚洲嫩模| 国产精品美女视频| 久久久不卡网国产精品二区| 3751色影院一区二区三区| 91在线观看污| 岛国精品在线观看| 国产自产高清不卡| 日韩国产欧美在线播放| 一区二区三区 在线观看视频| 国产午夜亚洲精品午夜鲁丝片| 7777女厕盗摄久久久| 一本大道久久精品懂色aⅴ| 国产成人精品免费网站| 亚洲自拍偷拍麻豆| 亚洲精品你懂的| 精品日韩一区二区三区免费视频| 欧美日韩在线三级| 国产精品自拍毛片| 视频一区免费在线观看| 精品视频在线视频| 国产乱人伦精品一区二区在线观看| 国产欧美精品一区| 欧美精品一卡两卡| 成人污污视频在线观看| 国产精品99久久久久久久vr| 久久品道一品道久久精品| 欧美电影免费观看高清完整版在线 | 99久久夜色精品国产网站| 国产成人综合在线播放| 国产一区二区三区| 国产真实乱对白精彩久久| 久久超碰97人人做人人爱| 久久精品免费观看| 韩国午夜理伦三级不卡影院| 国产美女精品在线| 国产丶欧美丶日本不卡视频| 国产白丝网站精品污在线入口| 国产麻豆视频一区| 粉嫩av一区二区三区在线播放| 国产精品99久久久久久宅男| 成人晚上爱看视频| 538在线一区二区精品国产| 欧美伊人久久大香线蕉综合69| 欧洲激情一区二区| 欧美日韩视频专区在线播放| 91精品婷婷国产综合久久性色| 日韩午夜激情电影| 久久久精品影视| 亚洲日本乱码在线观看| 婷婷成人综合网| 久久99久国产精品黄毛片色诱| 国产一区二区成人久久免费影院| 国产盗摄一区二区| 91精品福利视频| 欧美一级淫片007| 中文字幕av资源一区| 一区二区成人在线| 精品一区二区成人精品| 成人av资源在线| 国产ts人妖一区二区| 狠狠色综合日日| 在线精品国精品国产尤物884a| 日本精品视频一区二区三区| 欧美一区二区三区日韩| 久久奇米777| 中文字幕亚洲欧美在线不卡| 亚洲高清在线精品| 久久精品国内一区二区三区| 国产精品综合久久| 欧美日本在线观看| 日日骚欧美日韩| 一区二区三区蜜桃网| 麻豆极品一区二区三区| 国产酒店精品激情| 欧美日韩亚洲综合一区| 欧美大片在线观看一区二区| 国产精品视频第一区| 亚洲综合无码一区二区| 久久精品国产在热久久| 波多野结衣一区二区三区| 欧美性色综合网| 92国产精品观看| 日韩视频在线你懂得| 亚洲激情在线播放| 日本午夜一本久久久综合| av电影天堂一区二区在线观看| 国产大陆精品国产| 欧美日韩国产a| 欧美变态凌虐bdsm| 一区二区三区四区国产精品| 亚洲大片一区二区三区| 国产乱码精品一区二区三区av| 在线精品视频一区二区| 久久久亚洲高清| 性做久久久久久免费观看| 国产精品一区二区在线播放| 欧美高清视频一二三区| 国产精品美女久久久久av爽李琼 | 中文字幕一区在线观看视频| 亚洲国产欧美另类丝袜| 91小宝寻花一区二区三区| 日韩视频一区在线观看| 日韩主播视频在线| 99精品国产99久久久久久白柏 | 国产伦精品一区二区三区视频青涩 | 日韩欧美一二区| 亚洲一级二级三级在线免费观看| 韩国女主播成人在线| 91精品国产综合久久久久久久久久 | 粉嫩蜜臀av国产精品网站| 日韩精品一区二区三区老鸭窝 | 另类欧美日韩国产在线| 北条麻妃国产九九精品视频| 国产自产视频一区二区三区| 久久成人久久爱| 欧美日韩一区二区电影| 亚洲人成精品久久久久久| 国产精品亚洲视频| xnxx国产精品| 日韩电影在线一区二区三区| 色乱码一区二区三区88| 国产偷国产偷精品高清尤物| 日本怡春院一区二区| 欧美性受xxxx| 中文字幕一区二区视频| 国产99久久久国产精品潘金| 日韩免费视频线观看| 性做久久久久久| 欧美酷刑日本凌虐凌虐| 一卡二卡三卡日韩欧美| 欧美日韩免费观看一区三区| 亚洲精品乱码久久久久久日本蜜臀| 99麻豆久久久国产精品免费优播| 亚洲精品一区二区三区影院| 国产专区欧美精品| 精品久久久久久最新网址| 国产伦理精品不卡| 精品国产91久久久久久久妲己| 精品亚洲porn| 欧美日韩精品是欧美日韩精品| 五月天激情综合网| 91精品福利在线一区二区三区| 亚洲一卡二卡三卡四卡| 91精品国产综合久久小美女| 日韩高清电影一区| 精品国产91洋老外米糕| 捆绑紧缚一区二区三区视频| 亚洲精品一区二区三区影院| 黄网站免费久久| 中文字幕欧美区| 成年人网站91| 亚洲国产视频一区| 欧美日本韩国一区二区三区视频| 日韩不卡手机在线v区| 91精品国产免费久久综合| 久久99国产精品久久99果冻传媒| 欧美一级日韩不卡播放免费| 国产精品66部| 亚洲视频免费在线| 欧美日韩精品一区视频| 国产精品一线二线三线精华| 国产精品毛片大码女人| 欧美综合天天夜夜久久| 亚洲成a人片综合在线| 久久久午夜精品| youjizz久久| 亚洲欧美国产三级| 国产精品久久久久影院色老大 | 亚洲天天做日日做天天谢日日欢 | 8x福利精品第一导航| 91视视频在线观看入口直接观看www | 欧美日本在线一区| 亚洲制服丝袜一区| 日韩欧美亚洲另类制服综合在线 | 久久99国产精品尤物| 国产亚洲婷婷免费| 欧美色图片你懂的| 久久国产夜色精品鲁鲁99| 亚洲天堂精品在线观看| 欧美精选午夜久久久乱码6080| 国产不卡视频在线观看| 中文字幕综合网| 久久色在线视频| www.欧美色图| 国产老肥熟一区二区三区| 国产精品你懂的| 日韩午夜电影av| 欧美猛男超大videosgay| 国产精品99久久久久|