PHP开发框架Yii Framework教程(11) UI组件 ActiveForm示例

前面在介绍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同时提供客户端及服务器端无缝的、一致的验证。

<?php $form = $this-

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

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索表单
, array
, 用户
, model
, public
, yii实现model默认值
, ActiveForm
, CActiveForm
, yii2_rules验证规则
, yii2_rules自定义
, YII2.0表单
, Yii评论表单
, yii表单验证
DataModel
yii2 user组件、yii2 组件、yii2扩展组件、yii2 自定义组件、yii 组件,以便于您获取更多的相关知识。

时间: 2024-12-26 10:29:45

PHP开发框架Yii Framework教程(11) UI组件 ActiveForm示例的相关文章

PHP开发框架Yii Framework教程(20) UI组件 Captcha示例

Captcha(全自动区分计算机和人类的图灵测试-Completely Automated Public Turing test to tell Computers and Humans Apart,简称CAPTCHA)俗称验证码,是一种区分用户是计算机和人的公共全自动程序.在CAPTCHA测试中,作为服务器的 计算机会自动生成一个问题由用户来解答.这个问题可以由计算机生成并评判,但是必须只有人类才能解答.由于计算机无法解 答CAPTCHA的问题,所以回答出问题的用户就可以被认为是人类. Yii

PHP开发框架Yii Framework教程(18) UI 组件 TextHighlighter示例

CTextHighlighter用来格式化显示代码,目前支持显示的语言有ABAP, CPP, CSS, DIFF, DTD, HTML, JAVA, JAVASCRIPT, MYSQL, PERL, PHP, PYTHON, RUBY, SQL, XML,显示代码时也可以显示行号,通过showLineNumbers=TRUE打开行号显示. 本例显示PHP代码,一个带行号,一个不带行号: PHP code <!--?php $this--->beginWidget('CTextHighlight

PHP开发框架Yii Framework教程(17) UI 组件 TabView示例

CTabView 用来显示分页标签,使用TabView的基本方法是配置tabs属性,每个Tab可以配置如下属性 title:标签标 题. content: 标签显示内容. view: 标签显示View的名称,如果同时制定Content,则显示Content内容. url: 点击该 标签时页面重定向到指定URL. data: 当指定View属性时传给该View的属性数组. 本例显示三个标签页,分别使用不同 的标签内容: <center class="form"> <?p

PHP开发框架Yii Framework教程(16) UI 组件 StarRating示例

CStarRating 主要用于评分,显示一组星星(5 个)用于打分. 基本用法如下 <center class="form"> <?php $form=$this->beginWidget('CActiveForm'); ?> <?php $this->widget('CStarRating',array( 'model'=>$model, 'attribute'=>'rating', 'name'=>'rating', '

PHP开发框架Yii Framework教程(14) UI 组件 MaskedTextField示例

CMaskedTextField为格式输入框,可以为文本框指定Mask限制用户可以出入的文本格式,如本例使用99.99.9999 ,可以只允 许输入类似日期的文本. 修改View,添加CMaskedTextField 组件 <?php $this->widget ('CMaskedTextField',array( 'model'=>$model, 'attribute'=>'date', 'name'=>'date', 'mask'=>'99.99.9999', 'h

PHP开发框架Yii Framework教程(13) UI 组件 ContentDecorator示例

和Java Swing中类似Yii Framework 中的Layout 也允许嵌套,这是通过CContentDecorator来实现的,不过代码中并不需要 直接使用CContentDecorator ,而是在定义layout使用 $this->beginContent('path/to/view'); // ... content to be decorated $this->endContent(); 其中view 为另外一个布局. 本例定义四个Layout,一个嵌套一个: 开发框架Yii

PHP开发框架Yii Framework教程(12) UI 组件 ClipWidget示例

CClipWidget提供了类似录制"宏"的功能,定义在CClipWidget的init和run之间的内容可以存放在Controller的Clip变量中 ,然后重新回放到任意其它位置. CClipWidget封装的是CBaseController的beginClip和 endClip,CBaseController的 beginClip和 endClip的基本用法如下: 首先定义Clip $this->beginClip('clipID'); // ... display the

PHP开发框架Yii Framework教程(19) UI 组件 TreeView示例

CTreeView用来显示具有层次结构的数据,使用TreeView 通过设置Data属性.Data为具有下面结构的数组: ext: string, 树节点的文本. expanded: boolean,可选,表示该节点是否展开. id: string, 可选,该节点ID. hasChildren: boolean, 可选,缺省为False,当为True表示该节点含有子节点. children: array,可选,子节点数组.. htmlOptions: array, HTML选项. 到目前为止我们

PHP开发框架Yii Framework教程(15) UI 组件 MultiFileUpload示例

CMultiFileUpload 用于上传文件,支持一次同时上传多个文件.这个UI组件是基于jQuery Multi File Upload 插件.Yii 内置的很多UI组件都是基于JQuery,因此需要创建assets 目录用于存放动态生成的javascripts 等. 所上传的文件的信 息可以通过$_FILES[widget-name]来访问,比如,CMultiFileUpload的name为"files" 所上传的文件信息可以通过$_FILES ['files']来访问.此外包含