前面在介绍Yii Framework 开发教程(7) 使用CHtml 创建Form和Yii Framework 开发教程(8) 使用FormModel 已经对 CActiveForm做了简要的介绍。过几天就是圣诞节了,这里帮助圣诞老人做个调查表,调查每个人希望得到的圣诞节礼物和圣诞大餐想吃的食品)。
这里共享一部分代码,做为后续例子的框架,基本上是复制Hello World的例子,添加了一个空的DataModel,使用缺省的Controller(SiteController)和缺省的Action(actionIndex),使用缺省的配置文件,代码下载。
通过HTML表单收集用户数据是Web程序开发的主要工作之一。除了表单设计外, 开发者还需要将现存的或默认的数据填 充到表单,验证用户输入, 对无效的输入显示适当的错误信息,保存输入到持久性存储器。Yii通过其 MVC 结构极大地简化了此工作流程。
在 Yii 中处理表单时,通常需要以下步骤:
创建用于表现所要收集数据字段的模型类。
创建一 个控制器动作,响应表单提交。
在视图脚本中创建与控制器动作相关的表单。
创建DataModel
1 2 3 4 5 6 7 8 | 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',);}
|
Salin selepas log masuk
firstName,lastName 用于记载用户姓名,$favouriteGift和$favouriteDinner 记载用户的礼物和食品名称。 $gifts,$meals静态定义了可供用户选择的礼物种类和食品种类。这里要注意的是firstName,lastName是必填的,而 $favouriteGift和$favouriteDinner 设为可以安全复制的,这些由Model的rules来定义。
定义Action
修改 SiteController 的Action方法:
1 2 3 4 5 | 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 ,));}
|
Salin selepas log masuk
这里定义了两个View,index 用于获取用户输入,choice 显示用户选择结果。$model->attributes=$_POST ['DataModel']; 正如我们在 安全的特性赋值 中所讲的, 这行代码使用用户提交的数据填充模型。 attributes 属性由 CModel定义,它接受一个名值对数组并将其中的每个值赋给相应的模型特性。
定义View
首先是定义index.php ,本例使用CActiveForm,CActiveForm同时提供客户端及服务器端无缝的、一致的验证。
1 2 3 4 5 6 | >beginWidget('CActiveForm', array (
'id'=>'user-form',
'enableAjaxValidation'=>true,
'enableClientValidation'=>true,
'focus'=> array ( $model ,'firstName'),
)); ?>
|
Salin selepas log masuk
本例比较简单,没有使用这些复杂的校验,只要求FirstName,LastName非空,这是由DataModel中的rules 的 required 来定义的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | 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.
|
Salin selepas log masuk
运行结果如下:
1 | vcyzzCgxMSkgVUnX6bz+IEFjdGl2ZUZvcm3KvsD9 " src=" /uploadfile/2016/0106/20160106062558152.png" />
|
Salin selepas log masuk
以上就是PHP开发框架Yii Framework教程(11) UI组件 ActiveForm示例的内容,更多相关内容请关注PHP中文网(www.php.cn)!