热门标签 | 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示例

 



推荐阅读
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 本文详细介绍了在PHP中如何创建新文件以及如何使自定义函数在整个项目中全局可用的方法,包括最新的实践技巧。 ... [详细]
  • 本文探讨了如何在JavaScript中调用PHP函数及实现两者之间的有效交互,包括通过AJAX请求、动态生成JavaScript代码等方法。 ... [详细]
  • 本文详细记录了《PHP与MySQL Web开发》第一章的学习心得,特别关注了PHP的基本构成元素、标记风格、编程注意事项及表单处理技巧等内容。 ... [详细]
  • 本文探讨了缓存系统中的两个关键问题——缓存穿透与缓存失效时的雪崩效应,以及这些问题的解决方案。此外,文章还介绍了数据处理、数据库拆分策略、缓存优化、拆分策略、应用架构演进及通信协议的选择等内容。 ... [详细]
  • 本文介绍了一个基本的同步Socket程序,演示了如何实现客户端与服务器之间的简单消息传递。此外,文章还概述了Socket的基本工作流程,并计划在未来探讨同步与异步Socket的区别。 ... [详细]
  • 本文介绍如何利用Python中的Epoll机制构建一个高效的Web服务器,该服务器能够处理多个并发连接,并向每个连接的客户端返回预定义的响应文本。通过使用Epoll,服务器可以实现高性能的I/O多路复用。 ... [详细]
  • 在现代多线程编程中,Lock接口提供的灵活性和控制力超越了传统的synchronized关键字。Lock接口不仅使锁成为一个独立的对象,还提供了更细粒度的锁定机制,例如读写锁(ReadWriteLock)。本文将探讨如何利用ReentrantReadWriteLock提高并发性能。 ... [详细]
  • 本文探讨了PHP中使用命名空间和自动加载机制的重要性,特别是在大型项目中,如何有效管理和加载文件,避免代码冗余,提高开发效率。 ... [详细]
  • 本文探讨了Java异常处理的本质,提出了设计模式以优化异常处理,并分析了在AOP模型中异常处理的应用。文章强调了正确使用Java异常对于提升代码质量和维护性的关键作用。 ... [详细]
  • 深入理解SAP Fiori及其核心概念
    本文详细介绍了SAP Fiori的基本概念、发展历程、核心特性、应用类型、运行环境以及开发工具等,旨在帮助读者全面了解SAP Fiori的技术框架和应用场景。 ... [详细]
  • 本文探讨了Flutter和Angular这两个流行框架的主要区别,包括它们的设计理念、适用场景及技术实现。 ... [详细]
  • 现在的新手程序猿,动不动就是框架,就连外面培训的也是框架,我就问一句,没了框架是不是就啥也不会了 ... [详细]
  • 使用 ModelAttribute 实现页面数据自动填充
    本文介绍了如何利用 Spring MVC 中的 ModelAttribute 注解,在页面跳转后自动填充表单数据。主要探讨了两种实现方法及其背后的原理。 ... [详细]
  • 本文将从基础概念入手,详细探讨SpringMVC框架中DispatcherServlet如何通过HandlerMapping进行请求分发,以及其背后的源码实现细节。 ... [详细]
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社区 版权所有