Yii快速入门经典教程(4)

<?php $this->beginWidget('小物件类的路径别名'[,'包含属性初始化值的数组']); ?> ...可能会由小物件获取的内容主体... <?php $this->endWidget(); ?>

或者

<?php $this->widget('小物件类的路径别名'[,'包含属性初始化值的数组']); ?>

后者用于不需要任何 body 内容的组件。

小物件可通过配置来定制它的表现。这是通过调用 CBaseController::beginWidget 或 CBaseController::widget 设置其初始化属性值来完成的。

我们通过传递一个携带这些属性初始化值的数组来实现,该数组的键是属性的名称,而数组的值则是小物件属性所对应的值。如下所示 :

<?php $this->widget('CMaskedTextField',array( 'mask'=>'99/99/9999' )); ?>

继承 CWidget 并覆盖其init()和run()方法,可以定义一个新的小物件:

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

小物件可以像一个控制器一样拥有它自己的视图。

默认情况下,小物件的视图文件位于包含了小物件类文件目录的 views 子目录之下(protected/components/views)。这些视图可以通过调用CWidget::render()渲染,这一点和控制器很相似。唯一不同的是,小物件的视图没有布局文件支持。另外,小物件视图中的$this指向小物件实例而不是控制器实例。

3、系统视图

系统视图的渲染通常用于展示 Yii 的错误和日志信息。

系统视图的命名遵从了一些规则。比如像“errorXXX”这样的名称就是用于渲染展示错误号XXX的 CHttpException 的视图。例如,如果 CHttpException 抛出一个404错误,那么 error404 就会被显示。

在 framework/views 下, Yii 提供了一系列默认的系统视图. 他们可以通过在 protected/views/system 下创建同名视图文件进行自定义。

七、组件

Yii 应用建立于组件之上。组件是 CComponent 或其子类的实例。使用组件主要涉及访问它的属性以及触发或处理它的时间。基类 CComponent 指定了如何定义属性和事件。

1、组件属性

组件的属性就像对象的公共成员变量。它是可读写的。

要定义一个组件属性,我们只需在组件类中定义一个公共成员变量即可。

更灵活的方式是定义其 getter 和 setter 方法,例如:

public function getTextWidth() // 获取 textWidth 属性 { return $this->_textWidth; } public function setTextWidth($value) // 设置 TextWidth 属性 { $this->_textWidth=$value; }

上述代码定义了一个可写的属性名为 textWidth(名字是大小写不敏感的)。当读取属性时,getTextWidth() 就会被调用,其返回值则成为属性值;相似的,当写入属性时,setTextWidth() 被调用。如果 setter 方法没有定义,则属性将是只读的,如果对其写入则会抛出一个异常。使用 getter 和 setter 方法定义一个属性有一个好处:即当读取或写入属性时,可以执行额外的逻辑(例如,执行验证,触发事件)。

注意: 通过 getter/setter 定义的属性和类成员变量之间有一个细微的差异:属性的名字是大小写不敏感的, 而 类成员变量是大小写敏感的

2、组件事件

组件事件是一些特殊的属性,它们使用一些称作 事件句柄(event handlers)的方法作为其值。分配一个方法到一个事件将会引起方法在事件被唤起处自动被调用。因此,一个组件的行为可能会被一种在部件开发过程中不可预见的方式修改。
组件事件以 on 开头的命名方式定义。和属性通过 getter/setter 方法来定义的命名方式一样,事件的名称是大小写不敏感的。以下代码定义了一个 onClicked 事件:

public function onClicked($event) { $this->raiseEvent('onClicked', $event); }

这里作为事件参数的 $event 是 CEvent 或其子类的实例。

我们可以分配一个方法到此事件,如下所示:

复制代码 代码如下:

$component->onClicked=$callback;


这里的 $callback 指向了一个有效的 PHP 回调。它可以是一个全局函数也可以是类中的一个方法。如果是后者,它必须以一个数组的方式提供: array($object,'methodName')。

事件句柄的结构如下:

function 方法名($event) { ...... }

这里的 $event 即描述事件的参数(它来源于 raiseEvent() 调用)。$event 参数是 CEvent 或其子类的实例。至少,它包含了关于谁触发了此事件的信息。

事件句柄也可以是一个PHP 5.3以后支持的匿名函数。例如:

$component->onClicked=function($event) { ...... }

如果我们现在调用 onClicked(),onClicked 事件将被触发(在 onClicked() 中),附属的事件句柄将被自动调用。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/f8358b5fe8e9966f1442b4fd5bd257f4.html