在介绍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(!empty($_POST['RangeForm']))
{
$model->attributes=$_POST['RangeForm'];
if($model->validate()) $success=true;
}
$this->render('index', array(
'model' => $model,
'success' => $success,
));
}
创建对应的View
<!--?php if($success) : ?-->
Success!
<!--?php endif ?--></pre>
<div class="form"><!--?php $form=$this--->beginWidget('CActiveForm'); ?>
<!--?php echo $form--->errorSummary($model); ?>
<div class="row"><!--?php $this--->widget('RangeInputField',array(
'model'=>$model,
'attributeFrom' => 'from',
'attributeTo' => 'to',
)) ?></div>
<div class="row submit"></div>
<!--?php $this--->endWidget(); ?></div>
<pre>
<!-- form -->
运行这个例子
本例下载
分享到:
相关推荐
Yii Framework API手册 英文原版
yii framework框架 + yii app模板(基本、高级)
Yii Framework 1.1.6 框架
yii framework 中文完全手册
Yii是一个基于组件的高性能PHP框架,用于开发大型Web应用。Yii采用严格的OOP编写,并有着完善的库引用以及全面的教程。从 MVC,DAO/ActiveRecord,widgets,caching,等级式RBAC,Web服务,到主题化,I18N和L10N,...
Yii Framework是一个高性能的PHP5的web应用程序开发框架。通过一个简单的命令行工具 yiic 可以快速创建一个web应用程序的代码框架,开发者可以在生成的代码框架基础上添加业务逻辑,以快速完成应用程序的开发。
Yii是一个高性能的PHP5的web应用程序开发框架。通过一个简单的命令行工具 yiic 可以快速创建一个web应用程序的代码框架,开发者可以在生成的代码框架基础上添加业务逻辑,以快速完成应用程序的开发。
yii framework 1.1.14 chm文档,从官方html文档编译,展示效果很好.
PhpStorm6 创建yii framework项目全过程。
Yii 2.0进阶版 高级组件 优化京东平台 包括前后台源代码,使用php 实现数据库mysql
主要介绍了Yii Framework框架使用PHPExcel组件的方法,结合实例形式分析了Yii Framework框架中PHPExcel组件的下载、导入、调用等相关操作技巧,需要的朋友可以参考下
Yii Framework 1.10的API手册
PHP实例开发源码—Yii Framework php框架.zip PHP实例开发源码—Yii Framework php框架.zip PHP实例开发源码—Yii Framework php框架.zip
YiiFramework 最新最完善的YII框架
教程名称:Yii2.0 打造京东商城平台 PHP电商实战 Yii2.0视频教程 教程内容: 包含了电商的所有功能模块:商品展示、购物车功能、下单支付、发货、确认收获、商品管理、订单管理。电商API接口开发。Yii2.0级基于Yii...
yii framework 最全最新的中文手册
Yii Framework简介 Yii是一个高性能的PHP5的web应用程序开发框架。通过一个简单的命令行工具 yiic 可以快速创建一个web应用程序的代码框架,开发者可以在生成的代码框架基础上添加业务逻辑,以快速完成应用程序的...
Yii Framework 2.0 Where条件拼接 pdf 应该囊括 了大部分的查询示例,like ,not,...
Yii Framework 2.0 权威指南 pdf格式 中文高清离线版 有书签