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

PHP开发框架YiiFramework教程(10)UI组件自定义组件

PHP开发框架YiiFramework教程(10)UI组件自定义组件

在介绍Yii内置UI组件之前,先介绍一下如何自定义组件,这样也有助于理解CWidget的用法,自定义组件就是重载 CWidget 的init() 和 run() 方法。

class MyWidget extends CWidget    
{    
    public function init()
    {
        // 此方法会被 CController::beginWidget() 调用    
    }    

    public function run()    
    {
        // 此方法会被 CController::endWidget() 调用    
    }
}本例通过扩展CInputWidget,定义一个值域输入UI组件-RangeInputField,也就是允许用户输入两个数字定义一个值 域范围。CInputWidget 支持使用CModel或者直接使用变量,RangeInputField 也保留了这一传统。

RangeInputField定义了 三组属性。

$attributeFrom 和 $attributeTo 用于CModel,配合CHtml的 activeXXX 方法,activeXXX可以自动生成文本框 的标签和文本框。

属性$nameFrom,$nameTo,$valueFrom,$valueTo 程序员可以自行定义文本框的标签。

按照Yii 应用的缺省目录结构,新创建的RangeInputField 放在 protected/components 目录下,因此创建 protected/components/RangeInputField.php

class RangeInputField extends CInputWidget    
{    
    public $attributeFrom;    
    public $attributeTo;    

    public $nameFrom;    
    public $nameTo;    

    public $valueFrom;    
    public $valueTo;    

    function run()    
    {    
        if($this->hasModel())    
        {    
            echo CHtml::activeTextField($this->model,    
                $this->attributeFrom);    
            echo ' -> ';    
            echo CHtml::activeTextField($this->model,    
                $this->attributeTo);    
        }else
        {    
            echo CHtml::textField($this->nameFrom,    
                $this->valueFrom);    
            echo ' -> ';    
            echo CHtml::textField($this->nameTo,    
                $this->valueTo);    
        }    
    }    

    /**   
     * @return boolean whether this widget   
     * is associated with a data model.   
     */
    protected function hasModel()    
    {    
        return $this->model instanceof CModel    
            && $this->attributeFrom!==null    
            && $this->attributeTo!==null;    
    }    
}这样就自定义了一个新的UI组件RangeInputField ,只重载了run 方法, init 使用其父类中的方法。

下面 就可以来测试这个新创建的自定义UI组件RangeInputField, 我们使用FormModel (使用CModel)的方法来使用这个UI组件。

在protected/models下创建RangeFrom.php

class RangeForm extends CFormModel    
{    
    public $from;    
    public $to;    

    function rules()    
    {    
        return array(    
            array('from,to','numerical','integerOnly' =>true),    
            array('from','compare','compareAttribute'=>'to',    
                    'operator'=> '<=','skipOnError' => true),    
        );    
    }    
}然后修改缺省Controller的缺省方法, protected/controllers/siteController.php 中 actionIndex 方法。

public function actionIndex()    
{    
    $success=false;    
    $model=new RangeForm();    
        
    if(!emptyempty($_POST['RangeForm']))    
    {    
        $model->attributes=$_POST['RangeForm'];    
        
        if($model->validate()) $success=true;    

    }    

    $this->render('index', array(    
            'model' => $model,    
            'success' => $success,    
            ));    
}

创建对应的View

    

Success!    

    

beginWidget('CActiveForm'); ?>    

 errorSummary($model); ?>    

widget('RangeInputField',array(    
 'model'=>$model,    
 'attributeFrom' => 'from',    
 'attributeTo' => 'to',    
 )) ?>
    
    
endWidget(); ?>
    
     
运行这个例子

PHP开发框架Yii Framework教程(10) UI组件 自定义组件 



推荐阅读
  • 解决CSS因MIME类型不匹配导致的加载失败问题
    本文详细介绍了在Web开发过程中,遇到CSS文件因MIME类型不匹配而无法正确加载的问题及其解决方案,适合前端开发者阅读。 ... [详细]
  • 基于函数实现的进制转换工具
    本文介绍了一种利用函数实现不同进制数(二进制、八进制、十进制)之间转换的方法。包括了程序的运行效果展示、所使用的主要函数解析、以及如何验证用户输入的合法性。整个项目仅使用了两个全局变量来存储用户的选项和输入的数值。 ... [详细]
  • ArcGIS技巧:为相邻地块创建指定宽度的隔离带
    在地理信息系统(GIS)的数据处理中,为了满足特定项目的质量检查标准,需要在相邻地块之间创建一定宽度的隔离带。本文将探讨如何使用ArcGIS工具解决这一问题,确保不同地块图斑间保持规定的最小距离。 ... [详细]
  • 深度兴趣网络在点击率预测中的应用研究
    本文探讨了一种名为深度兴趣网络(Deep Interest Network, DIN)的新方法,该方法通过捕捉用户的历史行为和当前上下文之间的交互来提高点击率预测的准确性。DIN模型不仅考虑了用户的静态偏好,还动态地调整了对不同商品的兴趣权重,从而实现了更加个性化的推荐。 ... [详细]
  • 本文探讨了一个项目中遇到的挑战,即如何通过技术手段解决不同菜单项触发时,跨域IFrame页面的高度自适应问题。通过创建中介页面和利用JavaScript与Cookie机制,实现无缝的用户体验。 ... [详细]
  • 本文探讨了在PHP中处理特定类型编码字符串的方法,特别是如何将HTML实体编码的字符串转换为普通文本。 ... [详细]
  • 深入解析PHP Xdebug的安装与应用
    本文详细介绍了PHP Xdebug的安装步骤及其在PHP开发中的重要作用。Xdebug作为一款强大的调试工具,不仅能够帮助开发者追踪代码执行过程,还能有效提升代码质量和系统性能。 ... [详细]
  • 软件项目管理实践——Jenkins持续集成与Maven、GitHub的应用
    本文详细介绍了如何利用Jenkins实现持续集成,以及Maven和GitHub在项目开发中的具体应用。包括环境搭建、工具安装、项目创建及代码管理等关键步骤。 ... [详细]
  • 本文介绍如何利用Python中的Epoll机制构建一个高效的Web服务器,该服务器能够处理多个并发连接,并向每个连接的客户端返回预定义的响应文本。通过使用Epoll,服务器可以实现高性能的I/O多路复用。 ... [详细]
  • 下面根据配置文件,来说明一些底层与webservices的关系:回顾一下servlet的映射模式。我们知道,servlet是从javax.servlet.http.HttpServ ... [详细]
  • 一、数据更新操作DML语法中主要包括两个内容:查询与更新,更新主要包括:增加数据、修改数据、删除数据。其中这些操作是离不开查询的。1、增加数据语法:INSERTINTO表名称[(字 ... [详细]
  • 本文探讨了梯形图为何成为嵌入式软件机器编程中的理想选择,分析其特点及优势。 ... [详细]
  • 解析程序员与软件工程师的角色差异
    本文深入探讨了程序员与软件工程师之间的主要区别,包括它们的职业定位、技能要求以及工作内容等方面的不同,旨在帮助读者更好地理解这两个角色的特点。 ... [详细]
  • 每位开发者都应该拥有一个展示自我技能与分享知识的空间——个人技术博客。本文将指导你如何使用静态网站生成器Hexo结合GitHub Pages搭建这样一个平台。 ... [详细]
  • 本文将探讨iOS开发过程中需要掌握的三种关键编程语言——C、Objective-C和Swift,并深入解析面向过程与面向对象编程的概念,同时对比iOS与Android两大移动平台的特点。 ... [详细]
author-avatar
mobiledu2502905343
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有