ThinkPHP 3.1 引入 auto() 與 validate() 連貫操作,打破模型層靜態定義限制,支持在 Action 中動態設置 驗證與完成規則,配合 M() 方法實現零依賴模型類的數據處理。
$validate = [
['verify', 'require', '驗證碼必須!'],
['name', '', '帳號名稱已經存在!', 0, 'unique', 1],
];
$auto = [
['password', 'md5', 1, 'function'], // 新增時 md5
['create_time', 'time', 2, 'function'], // 新增/更新時 time()
];
M('User')->auto($auto)->validate($validate)->create();
| 自動驗證 | 自動完成 |
|---|---|
| [字段, 規則, 提示, 條件, 類型, 時間] | [字段, 內容, 條件, 類型] |
auto()和validate()必須在 create() 之前調用,否則不生效。
| 維度 | 模型層靜態 (_auto/_validate) | Action 動態 (auto/validate) |
|---|---|---|
| 定義位置 | Model 類屬性 | Action 方法內 |
| 靈活性 | 固定 | 按場景動態組裝 |
| 函數調用 | 不支持 | 支持 |
| 依賴 D 方法 | 是 | 否,M 方法即可 |
| 適用場景 | 通用規則 | 特殊業務、多場景差異 |
class UserAction extends Action {
public function register() {
$validate = [
['email', 'email', '郵箱格式錯誤'],
['password', 'require', '密碼必填'],
['repassword', 'password', '兩次密碼不一致', 0, 'confirm'],
];
M('User')->validate($validate)->create() && $this->success('註冊成功');
}
public function profile() {
$validate = [
['nickname', 'require', '暱稱必填'],
['avatar', 'checkAvatar', '頭像格式錯誤', 1, 'callback'],
];
$auto = [
['update_time', 'time', 2, 'function'],
];
M('User')->auto($auto)->validate($validate)->create() && $this->success('更新成功');
}
}
create($data, $type) 顯式指定新增/更新類型