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

Yii Framework 教程(11):CActiveForm 實作範例 - 聖誕願望調查表

     編輯:PHP 綜合知識

前面教程已簡要介紹 CActiveForm。趁聖誕節將近,我們來幫聖誕老人做個調查表,蒐集大家想要的禮物與大餐。

範例架構

共享部分代碼作為後續範例框架:複製 Hello World 專案,加入空的 DataModel,使用預設控制器與動作、預設配置檔。

Yii 處理表單流程

透過 HTML 表單蒐集使用者資料是 Web 開發主要工作之一。除了表單設計,開發者還需將既有或預設資料填入表單、驗證使用者輸入、顯示錯誤訊息、儲存輸入至持久化儲存。Yii 透過 MVC 結構極大簡化此流程。

處理表單通常步驟:

  1. 建立模型類別表現待收集資料欄位。
  2. 建立控制器動作回應表單提交。
  3. 在視圖腳本中建立與控制器動作相關的表單。

建立 DataModel

class DataModel extends CFormModel {
    public $firstName;
    public $lastName;
    public $favouriteGift;
    public $favouriteDinner;

    public function rules() {
        return array(
            array('firstName, lastName', 'required'),
            array('favouriteGift, favouriteDinner', 'safe'),
        );
    }

    static $gifts = array(
        '1' => 'iPad',
        '2' => 'Remote control helicopter',
        '3' => '60 inch 3D LED TV',
        '4' => 'Holy Bible',
    );

    static $meals = array(
        '1' => 'Egg',
        '2' => 'Ham',
        '3' => 'Chicken',
        '4' => 'Pork',
        '5' => 'Beer',
        '6' => 'Coke',
        '7' => 'Wine',
    );
}

firstName、lastName 記錄使用者姓名;favouriteGift、favouriteDinner 記錄禮物與食品。$gifts、$meals 靜態定義可選項目。姓名為必填,禮物與食品設為可安全複製(由 Model 的 rules 定義)。

定義 Action

修改 SiteController 的 Action 方法:

public function actionIndex() {
    $model = new DataModel();
    if (!empty($_POST['DataModel'])) {
        $model->attributes = $_POST['DataModel'];
        if ($model->validate()) {
            $this->render('choice', array('model' => $model));
            return;
        }
    }
    $this->render('index', array('model' => $model));
}

定義兩個視圖:index 取得使用者輸入,choice 顯示選擇結果。$model->attributes = $_POST['DataModel'] 使用使用者提交資料填充模型,attributes 由 CModel 定義,接受鍵值對陣列並將值賦給對應模型屬性。

定義視圖 - 使用 CActiveForm

index.php 使用 CActiveForm,提供客戶端與伺服器端無縫、一致的驗證:

<?php $form = $this->beginWidget('CActiveForm', array(
    'id' => 'user-form',
    'enableAjaxValidation' => true,
    'enableClientValidation' => true,
    'focus' => array($model, 'firstName'),
)); ?>
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved