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', '瓶數請填寫數字'),
array('email', 'email', '郵箱地址不合法', 2),
array('is_origin_box', array('是', '否'), '請填寫是或否', 2, 'in'),
array('gender', array('男', '女', '保密'), '請填寫男、女或保密', 2, 'in'),
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),
array('username', '', '用戶名已經存在', 0, 'unique', 1),
array('password_confirmation', 'password', '兩次輸入密碼不一致', 0, 'confirm'),
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),
array('username', '', '用戶名已經存在', 0, 'unique', 1),
array('password_confirmation', 'password', '兩次輸入密碼不一致', 0, 'confirm'),
array('username', 'checkUsername', '用戶名中含有非法字符', 2, 'callback'),
array('password', 'checkPwd', '密碼格式不正確', 0, 'function'),
);
定義好驗證規則後,就可以在使用create方法創建數據對象的時候自動調用
$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),
array('username', '', '用戶名已經存在', 0, 'unique', 1),
array('password_confirmation', 'password', '兩次輸入密碼不一致', 0, 'confirm'),
array('username', 'checkUsername', '用戶名中含有非法字符', 2, 'callback'),
array('password', 'checkPwd', '密碼格式不正確', 0, 'function'),
);
$user = M('user');
if (!$user->validate($rules)->create()) {
exit($user->getError());
}
舉個栗子
// 附加規則 function
// 自定義函數驗證密碼格式
array('password', 'checkPwd', '密碼格式不正確', 0, 'function'),
create function.php
// 注意php文件名好像只能是 function.php
Application/Common/Common/function.php
function.php
<?php
function checkPwd($password)
{
}
?>