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

Yii Framework 教程(8):使用 FormModel 處理表單資料

     編輯:PHP 綜合知識

透過前面的學習,我們已了解 Yii Web 應用程式的基本組成,並能撰寫如 Hangman 猜單字遊戲這類簡單應用。在第一篇教程中介紹過,Yii 採用 MVC 模式,本系列旨在以 Windows 桌面應用或 ASP.NET 程式設計師的視角,協助他們快速掌握 PHP Yii Framework。

View、Controller 與 Model 的類比

前面介紹了透過 CHtml 建立視圖(表單)、透過 CController 處理使用者提交事件。若與 Windows 桌面應用或 ASP.NET 類比:Yii 的視圖 類似 WinForm 或 ASP.NET Page;控制器 類似事件處理類別。不同之處在於 ASP.NET 和 Windows 應用可為 UI 元件定義 ID 並綁定事件處理,而 PHP/Yii 沒有對應機制。不過 Yii 提供了 CFormModel 來支援類似功能:透過 CFormModel,可為 HTML 表單中的 UI 元件定義變數,並在控制器中存取這些變數。每個 Yii 視圖通常提供一個「提交」按鈕,使用者點擊後觸發控制器對應的 actionXXX 方法,在該方法中可透過 CFormModel 取得表單元件的值。

模型類型概述

Yii 中的模型是 CModel 或其子類別的實例,用於保持資料及相關業務邏輯。Yii 實作兩種模型:

  • 表單模型:CFormModel 實例,用於保持從使用者輸入取得的資料,這些資料常被取得、使用後丟棄(如登入頁面的使用者名稱與密碼)。
  • Active Record (AR):透過物件導向風格抽象化資料庫存取的設計模式。每個 AR 物件是 CActiveRecord 或其子類別實例,代表資料表中的一列,欄位對應 AR 物件屬性。詳細內容將在資料庫章節介紹。

實作簡易登入介面

本篇透過一個簡單的登入介面示範 FormModel 用法。

1. 定義模型類別

建立 LoginForm(protected/models/LoginForm.php)模型類別,用於收集登入頁面的使用者輸入。因登入資訊僅用於驗證,無需儲存,故建立為表單模型:

class LoginForm extends CFormModel {
    public $username;
    public $password;
    public $rememberMe = false;
}

2. 宣告驗證規則

使用者提交輸入後,模型被填充,我們需在使用前確保輸入有效。透過 rules() 方法指定驗證規則,回傳規則設定陣列:

class LoginForm extends CFormModel {
    public $username;
    public $password;
    public $rememberMe = false;
    private $_identity;

    public function rules() {
        return array(
            array('username, password', 'required'),
            array('rememberMe', 'boolean'),
            array('password', 'authenticate'),
        );
    }

    public function authenticate($attribute, $params) {
        $this->_identity = new UserIdentity($this->username, $this->password);
        if (!$this->_identity->authenticate()) {
            $this->addError('password', '錯誤的使用者名稱或密碼。');
        }
    }
}

上述代碼指定:username 和 password 為必填;password 需經驗證;rememberMe 應為布林值。

規則格式說明

rules() 回傳的每個規則格式如下:

array('AttributeList', 'Validator', 'on' => 'ScenarioList', ...附加選項)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved