如何使用thinkphp的model來驗證前端表單?


為了增加安全性, 在向model表中寫入和修改數據時, 最好是調用 create方法來保證安全, 然后再調用add和save方法:

if($Model->Validate($validate)->create()){
...
$Model->add(..); || $Model->save(...);
...
}else{
$Model->getError(..);

}

關於類的定義中的const?

類中的常量通常用const常量, 而且是大寫的來表示, 使用時, 采用self::CONSTANT_NAME, 如:

class Model {
    // 操作狀態
    const MODEL_INSERT          =   1;      //  插入模型數據
    const MODEL_UPDATE          =   2;      //  更新模型數據
    const MODEL_BOTH            =   3;      //  包含上面兩種方式
    const MUST_VALIDATE         =   1;      // 必須驗證
    const EXISTS_VALIDATE       =   0;      // 表單存在字段則驗證
    const VALUE_VALIDATE        =   2;      // 表單值不為空則驗證

在Application的Model文件夾中, 通常沒有自定義的模型類, 因為, 你沒有自定義的, 自己需要的對 表->表單 的自動驗證, 自動完成等功能, 你可以直接使用Model類自己直接提供的方法和常量, 包括add, save, self::EXISTS_VALIDATE等都可以在app的模型中直接 使用, 但是如同跟其他類的繼承的使用方法, 如要在繼承的子類中定義自己的驗證方法, 則要 "覆蓋"override父類的這些成員屬性:

// 實際上, 這些屬性本身都是父類自己所具有的,  只是為空, 所以在子類中,只是重寫 override這些父類的屬性...
    protected $_validate        =   array();  // 自動驗證定義
    protected $_auto            =   array();  // 自動完成定義
    protected $_map             =   array();  // 字段映射定義
    protected $_scope           =   array();  // 命名范圍定義
    // 是否自動檢測數據表字段信息

驗證規則的寫法:

$_validate = array(
    array('驗證字段1', 驗證規則, '錯誤提示', [驗證條件, 附加規則, 驗證時間] ),
    array(驗證字段2, 驗證規則, 錯誤提示, [驗證條件, 附加規則, 驗證時間] ),
    array(驗證字段3, 驗證規則, 錯誤提示, [驗證條件, 附加規則, 驗證時間] ),...
);

// 驗證字段, 一定要加引號的;
// 驗證規則, 是自己寫的, 如 數字, 數組, 字符串等等, 當然, 你也可以使用 tp內置的驗證規則, 包括: require,number, email, url,currency等,到底有多少內置的驗證規則, 看源代碼就知道了: 實際上, 你還可以指定 整數, 雙精度數字, 英文字符: interger, 'double', 'english'...

// 附加的驗證規則, 是對前面的驗證規則的一個 "說明/補充"...如: function, callback, regex, in, notin, between, notbetween, length(前面的驗證規則表示輸入的字符串的長度個數),
主要是以下幾個的說明:

  • confirm: 是對當前驗證字段, 和前面的某個字段, 是否是一樣的,
  • unique: 就是驗證輸入的字段值,在當前表中,是否是唯一的, 即是否已經有同樣的值了, 那么前面的驗證規則就應該設置為'' 空;

驗證的方式,分為靜態驗證和動態驗證, 如果你只是對 前端表單 進行驗證, 則不必創建一個專門的UserModel類, 可以使用 Think\Model父類自己就有的validate方法, 這時候, 就可以直接用M方法, 而不必用D方法 (D方法 就等於 new \Home\UserModel();). 此時, 驗證規則就是一個普通的數組變量, 不是成員變量: $rules= array(..); $User=M('user'); $User->validate($rules); 這里的$rules不是 $_validate了. 這樣做就比較簡潔省事...


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM