前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >再谈Yii Framework框架中的事件event原理与应用

再谈Yii Framework框架中的事件event原理与应用

作者头像
砸漏
发布2020-11-02 15:42:21
4980
发布2020-11-02 15:42:21
举报
文章被收录于专栏:恩蓝脚本

本文实例讲述了Yii Framework框架中的事件event原理与应用。分享给大家供大家参考,具体如下:

再谈Yii Framework中的事件event,我写过的关于Yii事件event的另一篇文章

Yii Framework 中事件和行为的区别和应用 https://www.zalou.cn/article/184208.htm

假设有类MyComponent,它是继承于CComponent,通过查看 CComponent 的 __set() 方法,

代码语言:javascript
复制
public function __set($name,$value)
{
  $setter='set'.$name;
  if(method_exists($this,$setter))
    return $this- $setter($value);
  else if(strncasecmp($name,'on',2)===0 && method_exists($this,$name))
  {
    // duplicating getEventHandlers() here for performance
    $name=strtolower($name);
    if(!isset($this- _e[$name]))
      $this- _e[$name]=new CList;
    return $this- _e[$name]- add($value);
  }
  else if(is_array($this- _m))
  {
    foreach($this- _m as $object)
    {
      if($object- getEnabled() && (property_exists($object,$name) || $object- canSetProperty($name)))
        return $object- $name=$value;
    }
  }
  if(method_exists($this,'get'.$name))
    throw new CException(Yii::t('yii','Property "{class}.{property}" is read only.',
      array('{class}'= get_class($this), '{property}'= $name)));
  else
    throw new CException(Yii::t('yii','Property "{class}.{property}" is not defined.',
      array('{class}'= get_class($this), '{property}'= $name)));
}

第四行可知,我们可以通过 onXXX 来直接设置事件的。

绑定到全局事件处理

方法一:

直接在main.php里面定义

代码语言:javascript
复制
/***************************************************
在我们想要的内容的前后出现了这些代码
只是为了说明,我们添加的内容是要放在
这个配置数据的一维里面。
'import'= array(
  'application.models.*',
  'application.components.*',
  'application.helpers.*',
),
'defaultController'= 'post',
***************************************************/

//其它代码
'import'= array(
  'application.models.*',
  'application.components.*',
  'application.helpers.*',
),

/************** 这才是我们想要添加的代码 **************/
'onBeginRequest' =  array('MyEventHandler', 'MyEventHandlerMethod'),

'defaultController'= 'post',
//其它代码

方法二:

代码语言:javascript
复制
//参考自framework/logging/CLogRouter.php的init()方法
Yii::app()- attachEventHandler('onEndRequest',array($this,'processLogs'));

绑定到局部事件处理

随时随地无论在controller还是model里面,只要是CComponent的子类,都可以这样定义,

代码语言:javascript
复制
$myComponent- onClick = $callback;

这里的 $callback 指向了一个有效的 PHP 回调。它可以是一个全局函数也可以是类中的一个方法。

如果是后者,它必须以一个数组的方式提供 : array($object,'methodName')

其它文章推荐:

Yii组件的事件机制分析 https://www.zalou.cn/article/184203.htm

更多关于Yii相关内容感兴趣的读者可查看本站专题:《Yii框架入门及常用技巧总结》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-09-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 绑定到全局事件处理
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档