热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

PHP开发框架YiiFramework教程(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同时提供客户端及服务器端无缝的、一致的验证。

>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 given
            echo DataModel::$gifts[$model->favouriteGift];    
    ?>    
on Christmas Day.

And you will have
            foreach($model->favouriteDinner as $dinner)
        {
            echo DataModel::$meals[$dinner] . ' ';
        }    
    ?>
for Christmas dinner.

运行结果如下:

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

 



推荐阅读
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • Startup 类配置服务和应用的请求管道。Startup类ASP.NETCore应用使用 Startup 类,按照约定命名为 Startup。 Startup 类:可选择性地包括 ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 本文探讨了如何在 PHP 的 Eloquent ORM 中实现数据表之间的关联查询,并通过具体示例详细解释了如何将关联数据嵌入到查询结果中。这不仅提高了数据查询的效率,还简化了代码逻辑。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 本文介绍如何在现有网络中部署基于Linux系统的透明防火墙(网桥模式),以实现灵活的时间段控制、流量限制等功能。通过详细的步骤和配置说明,确保内部网络的安全性和稳定性。 ... [详细]
  • 本文详细探讨了 Django 的 ORM(对象关系映射)机制,重点介绍了其如何通过 Python 元类技术实现数据库表与 Python 类的映射。此外,文章还分析了 Django 中各种字段类型的继承结构及其与数据库数据类型的对应关系。 ... [详细]
  • 本文旨在提供一套高效的面试方法,帮助企业在短时间内找到合适的产品经理。虽然观点较为直接,但其方法已被实践证明有效,尤其适用于初创公司和新项目的需求。 ... [详细]
  • 苹果系统频繁弹窗提示无法验证服务器身份?竟是网易邮箱证书过期所致
    近日,众多苹果用户发现iOS、iPadOS和macOS系统频繁弹出无法验证服务器身份的警告。问题根源在于网易邮箱未能及时更新其数字证书,导致原证书过期后无法被信任。 ... [详细]
  • Spring Boot 中静态资源映射详解
    本文深入探讨了 Spring Boot 如何简化 Web 应用中的静态资源管理,包括默认的静态资源映射规则、WebJars 的使用以及静态首页的处理方法。通过本文,您将了解如何高效地管理和引用静态资源。 ... [详细]
author-avatar
肖顾问
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有