1.定义行为类
2. attach 行为类到 component 上
3. 触发行为
1.先定义一个 行为类:
class ApplicationBehavior extends CBehavior
{
public function beginRequest123($event)
{
echo "我已经将 onBeginRequest 的事件处理通过行为绑定了123";
var_dump($event);
}
}
调用时,通过 $component->行为方法() ,调用__call()
如果是行为的属性的话,可以通过如下访问:
$app = Yii::createWebApplication($config);
$ret = $app->attachBehavior('app', 'application.behaviors.ApplicationBehavior');
echo $app->a;
在 Yii 里面,通过行为类绑定,组件将一个或多个 CBehavior 类的成员方法和成员变量添加到自己身上,
并且在不需要的时候载掉某些 CBehavior 类。
同时,可以通过重写 CBehavior::events 的方法,来实现对目标类的多个事件绑定。
这些事件将会在当前行为绑定到目标类的时候,一起被绑定上。
下面我们以代码来具体看一下这个行为特性。
在 protected 创建目录 behaviors,并在protected/behaviors目录下创建ApplicationBehavior.php,
输入如下代码:
class ApplicationBehavior extends CBehavior
{
public function events()
{
return array_merge(parent::events(), array(
'onBeginRequest' => 'beginRequest123'
));
}
public function beginRequest123($event)
{
echo "我已经将 onBeginRequest 的事件处理通过行为绑定了";
var_dump($event);
}
}
此行为文件,是要为 CApplication 服务,仔细查看这个行为文件,我们可以看到,
events 方法定义了些行为可以处理的事件,
上面的类,
可以处理 onBeginRequest 事件,当然如果你自己定义的组件也有一个叫做 onBeginRequest 方法,
你也可以使用此行为
后面的 beginRequest 就是事件的处理函数,
这个处理函数必须要有行为类中定义。
行为与事件绑定
$this->_owner->attachEventHandler($event,array($this,$handler));
// $event 事件名,array($this,$handle) 类名,方法
getEventHandlers() 返回的是 CList 类
后面调用 CList 类的 add() 方法,将 event handle 添加进去