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


Posted in PHP onApril 07, 2020

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

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

Yii Framework 中事件和行为的区别和应用 https://3water.com/article/184208.htm

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

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里面定义

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

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

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

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

方法二:

//参考自framework/logging/CLogRouter.php的init()方法
Yii::app()->attachEventHandler('onEndRequest',array($this,'processLogs'));

绑定到局部事件处理

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

$myComponent->onClick = $callback;

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

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

其它文章推荐:

Yii组件的事件机制分析 https://3water.com/article/184203.htm

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

PHP 相关文章推荐
PHP3 safe_mode 失效漏洞
Oct 09 PHP
用js进行url编码后用php反解以及用php实现js的escape功能函数总结
Feb 08 PHP
PHP 事务处理数据实现代码
May 13 PHP
那些年一起学习的PHP(二)
Mar 21 PHP
解析用PHP实现var_export的详细介绍
Jun 20 PHP
CURL状态码列表(详细)
Jun 27 PHP
PHP使用mysql_fetch_row查询获得数据行列表的方法
Mar 18 PHP
php事务回滚简单实现方法示例
Mar 28 PHP
PDO::inTransaction讲解
Jan 28 PHP
php写app用的框架整理
Sep 29 PHP
PHP7 安装event扩展的实现方法
Oct 08 PHP
PHP程序员必须知道的两种日志实例分析
May 14 PHP
Yii框架组件的事件机制原理与用法分析
Apr 07 #PHP
Yii框架多语言站点配置方法分析【中文/英文切换站点】
Apr 07 #PHP
php设计模式之适配器模式实例分析【星际争霸游戏案例】
Apr 07 #PHP
php设计模式之迭代器模式实例分析【星际争霸游戏案例】
Apr 07 #PHP
解决Laravel5.x的php artisan migrate数据库迁移创建操作报错SQLSTATE[42000]
Apr 06 #PHP
4种Windows系统下Laravel框架的开发环境安装及部署方法详解
Apr 06 #PHP
Laravel5.5+ 使用API Resources快速输出自定义JSON方法详解
Apr 06 #PHP
You might like
PHP多例模式介绍
2013/06/24 PHP
一个PHP针对数字的加密解密类
2014/03/20 PHP
php实现文件下载实例分享
2014/06/02 PHP
PHP之密码加密的几种方式
2015/07/29 PHP
php parse_str() 函数的定义和用法
2016/05/23 PHP
PHP微信开发之根据用户回复关键词\位置返回附近信息
2016/06/24 PHP
10个实用的脚本代码工具
2010/05/04 Javascript
javascript之typeof、instanceof操作符使用探讨
2013/05/19 Javascript
解决html按钮切换绑定不同函数后点击时执行多次函数问题
2014/05/14 Javascript
Javascript函数式编程语言
2015/10/11 Javascript
jquery实现简易的移动端验证表单
2015/11/08 Javascript
原生js实现查询天气小应用
2016/12/09 Javascript
JavaScript实现二分查找实例代码
2017/02/22 Javascript
Javascript封装id、class与元素选择器方法示例
2017/03/13 Javascript
vue获取当前激活路由的方法
2018/03/17 Javascript
详解如何探测小程序返回到webview页面
2019/05/14 Javascript
VUE DEMO之模拟登录个人中心页面之间数据传值实例
2019/10/31 Javascript
Vue使用富文本编辑器Vue-Quill-Editor(含图片自定义上传服务、清除复制粘贴样式等)
2020/05/15 Javascript
python模拟新浪微博登陆功能(新浪微博爬虫)
2013/12/24 Python
python实现从网络下载文件并获得文件大小及类型的方法
2015/04/28 Python
使用python编写监听端
2018/04/12 Python
tensorflow实现简单的卷积网络
2018/05/24 Python
django模板结构优化的方法
2019/02/28 Python
python实现计数排序与桶排序实例代码
2019/03/28 Python
python绘制随机网络图形示例
2019/11/21 Python
Python 实现将数组/矩阵转换成Image类
2020/01/09 Python
python实现超级玛丽游戏
2020/03/18 Python
python中zip()函数遍历多个列表方法
2021/02/18 Python
周仰杰(JIMMY CHOO)英国官方网站:闻名世界的鞋子品牌
2018/10/28 全球购物
后勤人员自我评价怎么写
2013/09/19 职场文书
市三好学生主要事迹
2014/01/28 职场文书
毕业晚会主持词
2014/03/24 职场文书
思想纪律作风整顿剖析材料
2014/10/11 职场文书
市贸粮局召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
离婚民事起诉状
2015/08/03 职场文书
工人先锋号事迹材料(2016精选版)
2016/03/01 职场文书