為了增加安全性, 在向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: 就是驗證輸入的字段值,在當前表中,是否是唯一的, 即是否已經有同樣的值了, 那么前面的驗證規則就應該設置為'' 空;