首頁  >  文章  >  後端開發  >  PHP開發框架Yii Framework教學(11) UI元件 ActiveForm範例

PHP開發框架Yii Framework教學(11) UI元件 ActiveForm範例

黄舟
黄舟原創
2017-01-21 10:08:461089瀏覽

前面在介紹Yii Framework 開發教學(7) 使用CHtml 建立Form和Yii Framework 開發教學(8) 使用FormModel 已經對 CActiveForm做了簡單的介紹。過幾天就是聖誕節了,這裡幫助聖誕老人做個調查表,調查每個人希望得到的聖誕禮物和聖誕大餐想吃的食品)。

這裡共享一部分程式碼,做為後續例子的框架,基本上是複製Hello World的例子,增加了一個空的DataModel,使用缺省的Controller(SiteController)和缺省的Action(actionIndex),使用缺省的配置文件,代碼下載。

透過HTML表單收集使用者資料是Web程式開發的主要工作之一。除了表單設計外, 開發者還需要將現存的或預設的資料填 充到表單,驗證使用者輸入, 對無效的輸入顯示適當的錯誤訊息,保存輸入到持久性記憶體。 Yii透過其 MVC 結構極大地簡化了此工作流程。

在 Yii 中處理表單時,通常需要以下步驟:

建立用於表現所要收集資料欄位的模型類別。

建立一 個控制器動作,回應表單提交。

在視圖腳本中建立與控制器動作相關的表單。

建立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靜態定義了可供使用者選擇的禮物種類和食品種類。這裡要注意的是firstName,lastName是必填的,而 $favouriteGift和$favouriteDinner 設為可以安全複製的,這些由Model的rules來定義。

定義Action

修改 SiteController 的Action方法:

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

這裡定義了兩個View,index 用來取得使用者輸入,choice 顯示使用者選擇結果。 $model->attributes=$_POST ['DataModel']; 正如我們在 安全的特性賦值 中所講的, 這行程式碼使用使用者提交的資料填入模型。 attributes 屬性由 CModel定義,它接受一個名值對數組並將其中的每個值賦給對應的模型特性。

定義View

首先是定義index.php ,本例使用CActiveForm,CActiveForm同時提供客戶端及伺服器端無縫的、一致的驗證。

>beginWidget('CActiveForm', array(
'id'=>'user-form',
'enableAjaxValidation'=>true,
'enableClientValidation'=>true,
'focus'=>array($model,'firstName'),
)); ?>

本例比較簡單,沒有使用這些複雜的校驗,只要求FirstName,LastName非空,這是由DataModel中的rules 的 required 來定義的。

 

beginWidget('CActiveForm'); ?>
 
errorSummary($model); ?>
 
label($model,'firstName'); ?>textField($model,'firstName') ?>
 
 
label($model,'lastName'); ?>textField($model,'lastName') ?>
 
 
Choose your Christmas Gift
radioButtonList($model,'favouriteGift',DataModel::$gifts) ?>
 
 
 
 
Choose your Christmas dinner
checkBoxList($model,'favouriteDinner',DataModel::$meals) ?>
 
 
 
 
 
endWidget(); ?>
View Choice 就更简单,显示用户选择结果:
 
Christmas "; ?>firstName . ' ' . $model->lastName . '.' ;?>
 
You will be givenecho DataModel::$gifts[$model->favouriteGift];?>on Christmas Day.
 
 
And you will haveforeach($model->favouriteDinner as $dinner){echo DataModel::$meals[$dinner] . ' ';}?>
for Christmas dinner.

 

 


運行結果如下:

vcyzzCgxMSkgVUnX6bz+IEFjdGl2ZUZvcm3KvsD9" src="/uploadfile/2016/0106/20160106062558152.png" />

以上是PHPPH)框架Yii .cn)!


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn