PHP開發架構Yii Framework教程(8) 使用FormModel

來源:互聯網
上載者:User

通過前面的學習,我們瞭解了Yii Web應用的基本組成部分,也會編寫像Hangman猜單詞遊戲這樣簡單的應用。在第一個例子 Yii Framework 開發簡明教程(1) 第一個應用Hello World 我們介紹了Yii Web應用採用MVC模型,也說明了本教程目的是通過不 同的視角(主要是通過開發Windows應用C++,C#程式員的角度)協助Windows 案頭應用或ASP.Net程式員較快的掌握PHP Yii Framework應用程式架構。

前面我們介紹了通過CHtml建立View(整頁模式Form),通過CController來處理使用者提交事件 ,和Windows 案頭應用或ASP.Net做個類比, Yii 中視圖View (HTML Form) 類似於WinForm或是Asp.Net 的Page。 控制類 Controller類似Windows案頭應用或Asp.Net的事件處理(Code-Behind)類。不同的是Asp.Net和Windows 案頭應用可以為UI中各 個UI組件,比如文字框,按鈕定義Id,然後為不同的UI組件添加事件處理。PHP應用或是Yii應用沒有對應的機制可以為定義在 HTML Form中的UI組件定義一個Id,並為UI組件定義事件處理。 然而Yii 架構提供了CFormModel 可以支援類似的功能,簡單的 說,通過CFormModel,可以為HTML Form 中的UI小工具定義變數,並且可以在其控制類Controller中訪問這些變數。每個Yii View(Form)一般都提供一個“提交”按鈕(Submit Button),使用者點擊這個“提交按鈕”觸發CController對象對應的 actionXXX 方法,在actionXXX 方法中可以通過CFormModel來訪問HTML Form的UI組件的值。

前面教程中說過Yii中的模 型(Model)是 CModel 或其子類的執行個體。模型用於保持資料以及與其相關的商務邏輯,

Yii 實現了兩種類型的模型:表 單模型和 Active Record。二者均繼承於相同的基類 CModel。

表單模型是 CFormModel 的執行個體。表單模型用於保持從用 戶的輸入擷取的資料。 這些資料經常被擷取,使用,然後丟棄。例如,在一個登入頁面中, 我們可以使用表單模型用於表示由 終端使用者提供的使用者名稱和密碼資訊。更多詳情,請參考 使用表單。本篇介紹CFormModel的用法,

Active Record (AR) 是一種用於通過物件導向的風格抽象化資料庫訪問的設計模式。 每個 AR 對象是一個CActiveRecord 或其子類的執行個體。代表數 據表中的一行。 行中的欄位對應 AR 對象中的屬性。更多關於 AR 的細節請閱讀 Active Record. 後面介紹資料庫使用時再介 紹。

本篇使用一個簡單的登入介面來介紹FormModel的用法,本例下載。

1. 定義模型類

下面我們建立了一個 LoginForm (protected/models/LoginForm.php) 模型類用於在一個登入頁中收集使用者的輸入。 由於登 錄資訊只被用於驗證使用者,並不需要儲存,因此我們將 LoginForm 建立為一個 表單模型。

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 應被驗證(authenticated),rememberMe 應該是一 個布爾值。

rules() 返回的每個規則必須是以下格式:

array('AttributeList', 'Validator', 'on'=>'ScenarioList', ...附加選項)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.