再谈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 相关文章推荐
详解:――如何将图片储存在数据库里
Dec 05 PHP
php at(@)符号的用法简介
Jul 11 PHP
需要注意的几个PHP漏洞小结
Feb 05 PHP
wordpress自定义url参数实现路由功能的代码示例
Nov 28 PHP
php中cookie的使用方法
Mar 29 PHP
PHP获取MySql新增记录ID值的3种方法
Jun 24 PHP
php限制上传文件类型并保存上传文件的方法
Mar 13 PHP
php实现在服务器端调整图片大小的方法
Jun 16 PHP
php实现XML和数组的相互转化功能示例
Feb 08 PHP
详解Yii2 之 生成 URL 的方法
Jun 16 PHP
浅析PHP中的闭包和匿名函数
Dec 25 PHP
php命令行写shell实例详解
Jul 19 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获取mysql版本的几种方法小结
2008/03/25 PHP
PHP MemCached 高级缓存应用代码
2010/08/05 PHP
php笔记之:有规律大文件的读取与写入的分析
2013/04/26 PHP
详解PHP中的Traits
2015/07/29 PHP
最准确的php截取字符串长度函数
2015/10/29 PHP
PHP+Ajax无刷新带进度条图片上传示例
2017/02/08 PHP
PHP命令Command模式用法实例分析
2018/08/08 PHP
js停止输出代码
2008/07/20 Javascript
Javascript 读书笔记索引贴
2010/01/11 Javascript
JavaScript闭包 懂不懂由你反正我是懂了
2011/10/21 Javascript
jQuery自动切换/点击切换选项卡效果的小例子
2013/08/12 Javascript
javascript中call和apply的用法示例分析
2015/04/02 Javascript
JavaScript通过使用onerror设置默认图像显示代替alt
2016/03/01 Javascript
Bootstrap组件系列之福利篇几款好用的组件(推荐二)
2016/07/12 Javascript
Javascript中判断一个值是否为undefined的方法详解
2016/09/28 Javascript
javascript中json对象json数组json字符串互转及取值方法
2017/04/19 Javascript
jQuery表单验证之密码确认
2017/05/22 jQuery
p5.js实现动态图形临摹
2019/10/23 Javascript
vue.js中使用微信扫一扫解决invalid signature问题(完美解决)
2020/04/11 Javascript
Vue Cli3 打包配置并自动忽略console.log语句的方法
2020/04/23 Javascript
寻找网站后台地址的python脚本
2014/09/01 Python
python打开网页和暂停实例
2014/09/30 Python
python 代码运行时间获取方式详解
2020/09/18 Python
Python实现FTP文件定时自动下载的步骤
2020/12/19 Python
Python中Pyspider爬虫框架的基本使用详解
2021/01/27 Python
你应该知道的30个css选择器
2014/03/19 HTML / CSS
一款恶搞头像特效的制作过程 利用css3和jquery
2014/11/21 HTML / CSS
html5适合移动应用开发的12大特性
2014/03/19 HTML / CSS
美国首屈一指的高品质珠宝设计师和零售商:Allurez
2018/01/23 全球购物
表演方阵解说词
2014/02/08 职场文书
国际政治学专业推荐信
2014/09/26 职场文书
合伙购房协议样本
2014/10/06 职场文书
2015年档案管理员工作总结
2015/05/13 职场文书
Springboot集成阿里云OSS上传文件系统教程
2021/06/28 Java/Android
JS中如何优雅的使用async await详解
2021/10/05 Javascript
python高温预警数据获取实例
2022/07/23 Python