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

Mayfish 框架數據入庫驗證機制詳解:規則定義與自動校驗

     編輯:PHP 綜合知識

核心思想

在 Model 層聲明驗證規則,控制器調用 verify() 自動校驗,失敗返回錯誤信息,通過則執行入庫。實現「規則集中、邏輯解耦、防注入/XSS」。

1. Model 定義驗證規則

<?php
class MemberModel extends AppModel {
    protected $tableName = "members";

    protected $verify = array(
        array("NotEmpty", "username", "用戶名不能留空"),
        array("hasOne",   "username", "此用戶已經存在"),
        array("NotEmpty", "password", "密碼不能留空"),
        array("NotEmpty", "email",    "郵箱地址不能留空"),
        array("isEmail",  "email",    "郵箱格式不正確"),
        array("hasOne",   "email",    "郵箱已被占用")
    );

    public function create($data) {
        $data = array_map("addslashes", $data); // 轉義
        $data["password"] = md5($data["password"]); // 加密
        return parent::create($data);
    }
}
?>

2. 控制器執行驗證與入庫

private function PostData() {
    $fields = array("username", "password", "email");
    $post = array_map("trims", $_POST);          // 去首尾空格
    $post = parseHTML($post, $fields);           // 清理 HTML 標簽
    $data = parseFields($post, $fields);         // 白名單過濾字段

    $DB = & M("member");
    if (!$DB->verify($data)) {                   // 自動校驗
        $this->assign("error", $DB->getVerifyError());
        $this->assign("default", $post);         // 回填表單
        $this->display("/register.html");
    } else {
        $result = $DB->create($data);
        if (is_bool($result)) {                  // 入庫失敗
            $this->assign("default", $post);
            $this->display("/register.html");
        } else {                                 // 成功
            $this->assign("username", $data["username"]);
            $this->display("/reg_success.html");
        }
    }
}

3. 內置驗證規則

規則說明
NotEmpty字段非空
Number必須為整數
isEmail郵箱格式合法
hasOne值唯一(數據庫無重復)
Regex自定義正則,格式:array("Regex", "field", "/pattern/", "msg")

設計亮點

  • 聲明式:規則即配置,業務代碼零 if/else
  • 鏈式處理:trim → strip_tags → 白名單 → 驗證 → 入庫,安全層層遞進
  • 錯誤回顯:失敗保留用戶輸入,體驗友好

現代化對比

Laravel FormRequest、Symfony Validator、ThinkPHP Validate 均採用類似思想,支持更豐富規則(唯一、存在、大小、文件類型等)與自定義消息翻譯。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved