Yii Framework 开发教程(11) UI 组件 ActiveForm示例
来源:互联网 发布:小米网络电视怎么样 编辑:程序博客网 时间:2024/06/05 06:05
前面在介绍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(!empty($_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同时提供客户端及服务器端无缝的、一致的验证。
<?php $form = $this->beginWidget('CActiveForm', array( 'id'=>'user-form', 'enableAjaxValidation'=>true, 'enableClientValidation'=>true, 'focus'=>array($model,'firstName'),)); ?>
本例比较简单,没有使用这些复杂的校验,只要求FirstName,LastName非空,这是由DataModel中的rules 的 required 来定义的。
<div class="form"><?php $form=$this->beginWidget('CActiveForm'); ?> <?php echo $form->errorSummary($model); ?> <div class="row"> <?php echo $form->label($model,'firstName'); ?> <?php echo $form->textField($model,'firstName') ?> </div><div class="row"> <?php echo $form->label($model,'lastName'); ?> <?php echo $form->textField($model,'lastName') ?></div><p>Choose your Christmas Gift</p><div class="row"> <?php echo $form->radioButtonList($model,'favouriteGift', DataModel::$gifts) ?> </div> <p>Choose your Christmas dinner</p><div class="row"> <?php echo $form->checkBoxList($model,'favouriteDinner', DataModel::$meals) ?> </div> <div class="row submit"> <?php echo CHtml::submitButton('Submit'); ?> </div><?php $this->endWidget(); ?></div><!-- form -->
View Choice 就更简单,显示用户选择结果:
<?php echo "Merry Christmas "; ?><?php echo $model->firstName . ' ' . $model->lastName . '.' ;?><p /><p>You will be given<?phpecho DataModel::$gifts[$model->favouriteGift];?>on Christmas Day.</p><p>And you will have<?phpforeach($model->favouriteDinner as $dinner){echo DataModel::$meals[$dinner] . ' ';}?>for Christmas dinner.</p><p><?php echo CHtml::link('Start Again',array('index')); ?></p>
运行结果如下:
本例下载
- Yii Framework 开发教程(11) UI 组件 ActiveForm示例
- Yii Framework 开发教程(11) UI 组件 ActiveForm示例
- Yii Framework 开发教程(12) UI 组件 ClipWidget示例
- Yii Framework 开发教程(13) UI 组件 ContentDecorator示例
- Yii Framework 开发教程(14) UI 组件 MaskedTextField示例
- Yii Framework 开发教程(15) UI 组件 MultiFileUpload示例
- Yii Framework 开发教程(16) UI 组件 StarRating示例
- Yii Framework 开发教程(17) UI 组件 TabView示例
- Yii Framework 开发教程(18) UI 组件 TextHighlighter示例
- Yii Framework 开发教程(19) UI 组件 TreeView示例
- Yii Framework 开发教程(20) UI 组件 Captcha示例
- Yii Framework 开发教程(21) UI 组件 自定义Captcha示例
- Yii Framework 开发教程(12) UI 组件 ClipWidget示例
- Yii Framework 开发教程(13) UI 组件 ContentDecorator示例
- Yii Framework 开发教程(14) UI 组件 MaskedTextField示例
- Yii Framework 开发教程(15) UI 组件 MultiFileUpload示例
- Yii Framework 开发教程(16) UI 组件 StarRating示例
- Yii Framework 开发教程(17) UI 组件 TabView示例
- GNU C内联汇编(AT&T语法)
- 插入排序
- SQL SERVER 存储过程学习笔记
- Effective C++ 类与函数的设计和申明
- 关于解决文本框和按钮对齐的方案
- Yii Framework 开发教程(11) UI 组件 ActiveForm示例
- Linux 上的 Ruby Watir
- Keil arm 编译 RO RW ZI DATA
- [springMVC]Spring3MVC 在JSP中使用@ModelAttribute
- 详解Android中gravity和weight属性
- 蔡文超Qt前期学习总结
- java.lang.NoSuchMethodError: javax.servlet.ServletContext.getContextPath()Ljava/lang/String;
- POJ 2127 Greatest Common Increasing Subsequence (动态规划)
- 天天记录 - Android内存分析工具DDMS heap + MAT 安装和使用