前面在介绍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
<?php
echo DataModel::$gifts[$model->favouriteGift];
?>
on Christmas Day.</p>
<p>And you will have
<?php
foreach($model->favouriteDinner as $dinner)
{
echo DataModel::$meals[$dinner] . ' ';
}
?>
for Christmas dinner.</p>
<p><?php echo CHtml::link('Start Again',array('index')); ?></p>
运行结果如下:本例下载
分享到:
相关推荐
Yii Framework API手册 英文原版
yii framework框架 + yii app模板(基本、高级)
主要介绍了Yii Framework框架使用PHPExcel组件的方法,结合实例形式分析了Yii Framework框架中PHPExcel组件的下载、导入、调用等相关操作技巧,需要的朋友可以参考下
Yii Framework 1.1.6 框架
yii framework 中文完全手册
Yii Framework是一个高性能的PHP5的web应用程序开发框架。通过一个简单的命令行工具 yiic 可以快速创建一个web应用程序的代码框架,开发者可以在生成的代码框架基础上添加业务逻辑,以快速完成应用程序的开发。
Yii是一个基于组件的高性能PHP框架,用于开发大型Web应用。Yii采用严格的OOP编写,并有着完善的库引用以及全面的教程。从 MVC,DAO/ActiveRecord,widgets,caching,等级式RBAC,Web服务,到主题化,I18N和L10N,...
Yii是一个高性能的PHP5的web应用程序开发框架。通过一个简单的命令行工具 yiic 可以快速创建一个web应用程序的代码框架,开发者可以在生成的代码框架基础上添加业务逻辑,以快速完成应用程序的开发。
yii framework 1.1.14 chm文档,从官方html文档编译,展示效果很好.
PhpStorm6 创建yii framework项目全过程。
Yii Framework 1.10的API手册
PHP实例开发源码—Yii Framework php框架.zip PHP实例开发源码—Yii Framework php框架.zip PHP实例开发源码—Yii Framework php框架.zip
教程名称:Yii2.0 打造京东商城平台 PHP电商实战 Yii2.0视频教程 教程内容: 包含了电商的所有功能模块:商品展示、购物车功能、下单支付、发货、确认收获、商品管理、订单管理。电商API接口开发。Yii2.0级基于Yii...
YiiFramework 最新最完善的YII框架
主要介绍了Yii Framework框架开发微信公众平台,结合实例形式分析了使用Yii Framework框架开发微信公众平台相关原理、功能代码与实现技巧,需要的朋友可以参考下
Yii Framework 2.0 Where条件拼接 pdf 应该囊括 了大部分的查询示例,like ,not,...
yii framework 最全最新的中文手册
Yii 2.0进阶版 高级组件 优化京东平台 包括前后台源代码,使用php 实现数据库mysql
Yii Framework简介 Yii是一个高性能的PHP5的web应用程序开发框架。通过一个简单的命令行工具 yiic 可以快速创建一个web应用程序的代码框架,开发者可以在生成的代码框架基础上添加业务逻辑,以快速完成应用程序的...