ThinkPHP 3.1 引入 auto() 和 validate() 連貫操作,允許在 Action 中動態定義驗證/完成規則,無須依賴模型類靜態屬性,極大提升靈活性。
$validate = array(
array('verify', 'require', '驗證碼必須!'),
array('name', '', '帳號名稱已經存在!', 0, 'unique', 1),
);
$auto = array(
array('password', 'md5', 1, 'function'), // 新增時 md5 加密
array('create_time', 'time', 2, 'function'), // 寫入時自動時間戳
);
// 實例化模型並鏈式調用
M('User')->auto($auto)->validate($validate)->create();
與模型 _validate / _auto 屬性完全一致:
array(字段, 規則, 提示, 條件, 類型, 模式)array(字段, 內容, 條件, 類型)關鍵優勢:支援函數調用(如 time()、md5),模型屬性定義因 PHP 語法限制無法調用函數。
auto() 和 validate() 必須在 create() 之前調用,否則不生效。
| 方式 | 靈活性 | 函數調用 | 依賴 D() |
|---|---|---|---|
| 模型靜態屬性 (_validate/_auto) | 低(固定) | 不支援 | 是 |
| 動態 auto()/validate() | 高(運行時決定) | 支援 | 否(M() 即可) |