CakePHP的資料驗証設定很彈性,因此在設定上的寫法花樣很多,以下只例舉我常用的做法:
public $validate = array(
"account" => array(
/* 檢查是不是數字與英文字母的組合 */
"alphanumberic" => array(
"rule" => "alphaNumeric",
"message" => "只能是數字或英文字母",
"last" => true
), /* end alpha-numeric */
/* 檢查字串的長度在4~20之間 */
"length" => array(
"rule" => array("between", 4, 20),
"message" => "您的帳號長度不正確,只能 4~20字元",
"last" => true
), /* end length */
/* 檢查是不是唯一值 (自訂函式) */
"unique" => array(
"rule" => array("checkUnique", "account"),
"message" => "這個帳號已經註冊,請重新取一個",
"on" => "create"
) /* end unique */
),/* end for account */
}
資料驗証的使用方式是 "自訂的規則名稱" => array("rule" => "內建或自訂的規則", "message"=>"發生錯誤時,要顯示的訊息"),其中 "rule" => "內建或自訂的規則" ,如果使用的規則是Regex或者沒有額外參數的函式(像alphaNumeric,只要傳值去做驗証即可,不需要其他額外的參數),那就可以以字串的方式設定。相反的,如果規則是函式,且需要額外的參數時(像 between, 需要有最大、最小值),那就要以array的方式設定。
以下是其他參數的說明:
on: 值有"create"和"update",如果值是"create",意思是指在做insert時,才會使用這個驗証規則,同理是"update"時,只有在update資料庫時,才會使用。如果都不做設定的話,不論是要做insert或update,只要Controller有把這個欄位的值傳進來,就會使用這個規則做驗証。
last: 設定成 true 時(CakePHP預設值是false),是告知CakePHP只要這個規則沒通過時,就不要再執行同欄位的其他規則。
自訂函式說明:
以下是程式碼是截自CakePHP官網的說明,請見 http://book.cakephp.org/view/125/data-validation
function checkUnique($data, $fieldName) {
$valid = false;
if(isset($fieldName) && $this->hasField($fieldName))
{
$valid = $this->isUnique(array($fieldName => $data));
}
return $valid;
}
在寫自訂的函式時,請注意,第一個參數要保留給CakePHP把欄位的值傳進來,從第二個參數開始才是自訂的參數。像上面的checkUnique,$data是指傳進來的欄位值,$fieldName是指要檢查的欄位名稱。
參考資料:
http://book.cakephp.org/view/125/data-validation
原文:http://otaku.kigi.tw/2008/03/cakephp-12-model-data-validation.html