PHP开发框架Yii Framework教程(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,
            ));
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索方法
, function
, this
, 组件
, 自定义组件
, public
, protected
, Yii创建Widget
yii自定义验证
html5 ui组件框架、yii gii ui框架、yii2 user组件、yii2 组件、yii2扩展组件,以便于您获取更多的相关知识。

时间: 2024-12-02 14:06:00

PHP开发框架Yii Framework教程(10) UI组件 自定义组件的相关文章

PHP开发框架Yii Framework教程(22) UI组件 Zii组件简介

前面介绍了Yii框架支持的部分UI组件,除了前面介绍的UI组件外,Yii框架还提供了Zii组件库,包括列表视图ListView,表 格视图GridView,此外还包括一些基于JQuery的UI组件,如AutoComplete,DataPicker, Button, Drag 和 Drop等,Zii组件主要 定义在包zii.* ,zii.widget.* 开发框架Yii Framework教程(22) UI组件 Zii组件简介-yii2 user组件"> 由于其中部分UI组件和数据源(Dat

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教程(21) UI 组件 自定义Captcha示例

Yii内置的Captcha基本上可以满足大部分需求,如果你对验证码有特殊要求,你可以自定义Captcha,这主要是通过扩展 CCaptchaAction来实现的,本例自定义一个验证码功能,随机产生10以内的加减法,用户需要计算出正确的结果才能通过验证. 本例基于上例Yii Framework 开发教程(20) UI 组件 Captcha示例,做如下修改 首先在protected/components 目 录下创建一个MathCaptchaAction,重载generateVerifyCode,