thinkphp模型驗證總結

php thinkphp 模型自動驗證 靜態定義 動態驗證

定義 demos

驗證字段, 驗證規則, 錯誤提示,[ 驗證條件, 附加規則, 驗證時間])
驗證條件(可選)
包含下面幾種情況:
0 存在字段就驗證(默認)
1 必須驗證
2 值不爲空的時候驗證

驗證時間(可選)
self::MODEL_INSERT 或者 1 新增數據時候驗證
self::MODEL_UPDATE 或者 2 編輯數據時候驗證
self::MODEL_BOTH   或者 3 全部情況下驗證(默認)
這裏的**驗證時間**需要注意,並非只有這三種情況,你可以根據業務需要增加其他的驗證時間
array('name', 'require', '酒的名稱必須填寫', 1),
array('username', 'require', '用戶名不可爲空', 1),
array('quantity', 'number', '瓶數請填寫數字'),
// 2 值不爲空的時候驗證
array('email', 'email', '郵箱地址不合法', 2),
// in
array('is_origin_box', array('是', '否'), '請填寫是或否', 2, 'in'),
array('gender', array('男', '女', '保密'), '請填寫男、女或保密', 2, 'in'),
// between 1901~今年
array('year', array(1901, 2015), '年份填寫範圍需爲1901~今年', 2, 'between'),
// 正則表達式驗證
array('username', '/^.*[^\d].*$/', '用戶名不可爲純數字', 2),
array('birthday', '/^\d{4}-\d{2}-\d{2}$/', '生日填寫不規範', 2),
array('phone', '/^13[0-9]{1}[0-9]{8}$|15[01689]{1}[0-9]{8}$|18[289][0-9]{8}$/', '手機號碼格式不正確', 2),
// unique
// 在新增的時候驗證username字段是否唯一
array('username', '', '用戶名已經存在', 0, 'unique', 1),
// cofirm 驗證表單中的兩個字段是否相同,定義的**驗證規則**是一個字段名
array('password_confirmation', 'password', '兩次輸入密碼不一致', 0, 'confirm'),
// callback 方法驗證,定義的驗證規則是**當前模型類**的一個方法
array('username', 'checkUsername', '用戶名中含有非法字符', 2, 'callback'),
// 函數驗證,定義的驗證規則是一個函數名
array('password', 'checkPwd', '密碼格式不正確', 0, 'function'),

靜態定義

在模型類裏面定義 $_validate 屬性
// 驗證規則
protected $_validate = array(
        array('username', 'require', '用戶名不可爲空', 1),
        array('email', 'email', '郵箱地址不合法', 2),
        array('gender', array('男', '女', '保密'), '請填寫男、女或保密', 2, 'in'),
        array('year', array(1901, 2015), '年份填寫範圍需爲1901~今年', 2, 'between'),
        array('username', '/^.*[^\d].*$/', '用戶名不可爲純數字', 2),
        // 在新增的時候驗證username字段是否唯一
        array('username', '', '用戶名已經存在', 0, 'unique', 1),
        array('password_confirmation', 'password', '兩次輸入密碼不一致', 0, 'confirm'),
        array('username', 'checkUsername', '用戶名中含有非法字符', 2, 'callback'),
        array('password', 'checkPwd', '密碼格式不正確', 0, 'function'),
    );
定義好驗證規則後,就可以在使用create方法創建數據對象的時候自動調用
// 實例化user對象
$user = D('user');
if (!$user->create()) {
     // 如果創建失敗,表示驗證沒有通過,輸出錯誤提示信息
     exit($user->getError());
}
靜態定義方式因爲必須定義模型類,所以只能用D函數實例化模型

動態驗證

$rules = array(
        array('username', 'require', '用戶名不可爲空', 1),
        array('email', 'email', '郵箱地址不合法', 2),
        array('gender', array('男', '女', '保密'), '請填寫男、女或保密', 2, 'in'),
        array('year', array(1901, 2015), '年份填寫範圍需爲1901~今年', 2, 'between'),
        array('username', '/^.*[^\d].*$/', '用戶名不可爲純數字', 2),
        // 在新增的時候驗證username字段是否唯一
        array('username', '', '用戶名已經存在', 0, 'unique', 1),
        array('password_confirmation', 'password', '兩次輸入密碼不一致', 0, 'confirm'),
        array('username', 'checkUsername', '用戶名中含有非法字符', 2, 'callback'),
        array('password', 'checkPwd', '密碼格式不正確', 0, 'function'),
    );

// 實例化user對象
$user = M('user');
if (!$user->validate($rules)->create()) {
     // 如果創建失敗,表示驗證沒有通過,輸出錯誤提示信息
     exit($user->getError());
}
// 驗證通過,執行後續操作
// todo

舉個栗子

// 附加規則 function
// 自定義函數驗證密碼格式
array('password', 'checkPwd', '密碼格式不正確', 0, 'function'),

create function.php

// 注意php文件名好像只能是 function.php
Application/Common/Common/function.php

function.php

<?php

function checkPwd($password)
{
    // handle $password
    // todo

    // return true;
    // or
    // return false;
}


?>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章