首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

ThinkPHP 3.1 動態自動驗證與自動完成:Action 層靈活定義規則

     編輯:PHP 相關知識

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();

規則格式對照

自動驗證自動完成
[字段, 規則, 提示, 條件, 類型, 時間][字段, 內容, 條件, 類型]
  • 條件:1 新增、2 更新、3 全部
  • 類型:function/function/callback/regex/unique 等
  • 支持函數調用,突破屬性定義無法調用函數的限制

關鍵調用順序

auto() 和 validate() 必須在 create() 之前調用,否則不生效。

對比:靜態 vs 動態

維度模型層靜態 (_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('更新成功');
    }
}

最佳實踐

  • 通用規則(如唯一性、格式)放模型層靜態定義
  • 業務相關、場景差異大的規則用動態定義
  • 動態規則建議提取為 Service/Helper 類方法,保持 Action 精簡
  • 配合 create($data, $type) 顯式指定新增/更新類型
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved