再谈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 相关文章推荐
隐藏X-Space个人空间下方版权方法隐藏X-Space个人空间标题隐藏X-Space个人空间管理版权方法
Feb 22 PHP
PHP计划任务、定时执行任务的实现代码
Apr 23 PHP
php采用file_get_contents代替使用curl实例
Nov 07 PHP
使用XHGui来测试PHP性能的教程
Jul 03 PHP
PHP代码实现爬虫记录――超管用
Jul 31 PHP
CodeIgniter钩子用法实例详解
Jan 20 PHP
基于PHP微信红包的算法探讨
Jul 21 PHP
CI框架使用composer安装的依赖包步骤与方法分析
Nov 21 PHP
Yii2实现多域名跨域同步登录退出
Feb 04 PHP
php和C#的yield迭代器实现方法对比分析
Jul 17 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
Feb 22 PHP
yii2.0框架数据库操作简单示例【添加,修改,删除,查询,打印等】
Apr 13 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
第七节--类的静态成员
2006/11/16 PHP
php magic_quotes_gpc的一点认识与分析
2008/08/18 PHP
深入分析PHP优化及注意事项
2016/07/04 PHP
Thinkphp微信公众号支付接口
2016/08/04 PHP
PHP通过curl获取接口URL的数据方法
2018/05/31 PHP
Laravel5.1 框架Middleware中间件基本用法实例分析
2020/01/04 PHP
在多个页面使用同一个HTML片段《续》
2011/03/04 Javascript
改进版通过Json对象实现深复制的方法
2012/10/24 Javascript
在javascript中关于节点内容加强
2013/04/11 Javascript
js跑步算法的实现代码
2013/12/04 Javascript
JS获取地址栏参数的几种方法小结
2014/02/28 Javascript
jquery实现在页面加载的时自动为日期插件添加当前日期
2014/08/20 Javascript
JavaScript动态创建link标签到head里的方法
2014/12/22 Javascript
JavaScript原生对象之String对象的属性和方法详解
2015/03/13 Javascript
js实现支持手机滑动切换的轮播图片效果实例
2015/04/29 Javascript
javascript实现html页面之间参数传递的四种方法实例分析
2015/12/15 Javascript
复杂的javascript窗口分帧解析
2016/02/19 Javascript
Node.js安装配置图文教程
2017/05/10 Javascript
Vue.js中provide/inject实现响应式数据更新的方法示例
2019/10/16 Javascript
python爬虫headers设置后无效的解决方法
2017/10/21 Python
python添加菜单图文讲解
2019/06/04 Python
Django项目基础配置和基本使用过程解析
2019/11/25 Python
python 解决selenium 中的 .clear()方法失效问题
2020/09/01 Python
python pillow库的基础使用教程
2021/01/13 Python
收集的22款给力的HTML5和CSS3帮助工具
2012/09/14 HTML / CSS
CSS3用@font-face实现自定义英文字体
2013/09/23 HTML / CSS
使用canvas一步步实现图片打码功能的方法
2019/06/17 HTML / CSS
8和9的加减法教学反思
2014/05/01 职场文书
新闻报道策划方案
2014/06/11 职场文书
大学生交通专业求职信
2014/09/01 职场文书
学校领导班子四风问题整改意见
2014/10/02 职场文书
2014年前台个人工作总结
2014/11/14 职场文书
电影雨中的树观后感
2015/06/15 职场文书
初婚初育证明范本
2015/06/18 职场文书
结婚典礼主持词
2015/06/29 职场文书
会计专业2019暑假实习报告
2019/06/21 职场文书