这里说的是通过行为的方式绑定事件

  • 定义行为事件类:EventService.php
<?php
namespace api\components;use Yii;
use yii\base\Behavior;
use yii\base\Application;/*** 事件类*/
class EventService extends Behavior
{// 定义事件名const EVENT_BEFORE_DEMO1 = 'beforeDemo1';/*** [ 事件绑定处理程序 ]* @return [type] [description]*/public function events(){return [Application::EVENT_BEFORE_REQUEST => 'demo',self::EVENT_BEFORE_DEMO1 => 'demo1',];}/*** [ 事件测试 ]* @param  [type] $event [description]* @return [type]        [description]*/public function demo($event){Yii::info(['message'=>'事件测试(自动触发)'], 'demo');}/*** [ 事件测试1 ]* @param  [type] $event [description]* @return [type]        [description]*/public function demo1($event){$log = ['message' => '事件测试1','ip' => $event->ip,'route' => $event->route,];Yii::info($log, 'demo1');}
}
  • 定义数据格式类:MyEvent.php
<?php
namespace api\components;use Yii;
use yii\base\Model;
use yii\base\Event;/*** ContactForm is the model behind the contact form.*/
class MyEvent extends Event
{/** @var [type] [ 请求路由 ] */public $route;/** @var [type] [ 请求IP ] */public $ip;}
  • 配置自动触发事件
在config/main.php中components同级定义'name' => 'My Api','as behaviors' => 'api\components\EventService','components' => [ ... ]
  • 在行为函数中手动触发行为事件
    /*** [ 首页 ]* @return [type] [description]*/public function actionIndex(){$event = new MyEvent();// 传递参数$event->ip = Yii::$app->request->userIP;$event->route = Yii::$app->requestedRoute;// 手动触发事件Yii::$app->trigger(EventService::EVENT_BEFORE_DEMO1, $event);}
  • 查看日志
2020-08-05 14:43:47 [127.0.0.1][-][-][info][demo] ['message' => '事件测试(自动触发)',
]in E:\data\www\project\php\yii2\advanced\api\components\EventService.php:35
2020-08-05 14:43:47 [127.0.0.1][-][-][info][demo1] ['message' => '事件测试1','ip' => '127.0.0.1','route' => 'site/index',
]in E:\data\www\project\php\yii2\advanced\api\components\EventService.php:50in E:\data\www\project\php\yii2\advanced\api\controllers\SiteController.php:84
2020-08-05 14:43:47 [127.0.0.1][-][-][info][application] $_GET = []

Yii2 事件的使用就是这么简单,利用事件可以帮助我们完成很多功能。

const EVENT_BEFORE_REQUEST = 'beforeRequest',这个是yii\base\Application自带的事件,意思是"事件在应用程序开始处理请求之前引发的事件"。

有请求前的就肯定有请求后的事件。const EVENT_AFTER_REQUEST = 'afterRequest',意思是"事件在应用程序成功处理请求之后(在发出响应之前)引发的事件。"。

自定义的事件需要在特定需要的时候去触发。Yii::$app->trigger('定义事件名', 实例化event的类,可以传递参数,可以不传递)

以上就是对Yii2框架事件使用方法分享,各位大牛要是有更好的方法也请分享一下。

Yii2 event-如何使用事件相关推荐

  1. Yii2 event tigger 关于事件的简单使用

    首先需要明白事件是什么?在什么情况下使用?使用它带来了什么好处? 基于官方 https://www.yiiframework.com/doc/guide/2.0/zh-cn/concept-event ...

  2. VC++中多线程学习(MFC多线程)三(线程同步包含:原子互锁、关键代码段、互斥器Mutex、Semaphores(信号量)、Event Objects(事件))

    目录 ​​​​​​​​​​​​ 线程同步的必要性: 2.解决同步问题的方法 2.1原子互锁家族函数 2.2Critical Sections(关键代码段.关键区域.临界区域) 2.3 互斥器Mutex ...

  3. 事件根基event_base、事件循环event_loop、事件event、信号事件SignalEvent

    一.event_base (一) libevent简介与浅谈event_base libevent实际上就是对底层select/poll/epoll等进行了封装,每个event_base都有一种&qu ...

  4. Google Map Event 谷歌地图事件

    https://blog.csdn.net/lihefei_coder/article/details/73832664 Google Map Event 谷歌地图事件

  5. IP Event Dampening (IP事件惩罚)

    IP Event Dampening(IP事件惩罚) 目前仅支持static.RIP.OSPE.EIGRP.IS-IS.BGP.HSRP,不支持子接口.虚拟接口. 作用:当接口处于不稳定的状态,不断翻 ...

  6. Activiti 中的 Start event(启动事件元素)介绍

    Start event(启动事件元素) 启动事件元素就是启动流程实例的,也就是发起一个流程的,是流程的起点.它可以配置的很简单,也可以很复杂. StartEvent:空启动事件.它的属性介绍如下: I ...

  7. (十三)事件分发器——event()函数,事件过滤

    事件分发器--event()函数 事件过滤 事件进入窗口之前被拦截 eventFilter #include "mywidget.h" #include "ui_mywi ...

  8. SAP CRM和Cloud for Customer中的Event handler(事件处理器)

    SAP CRM可以在开发工具中用右键直接创建一个新的事件处理器: 这些事件处理器实际上就是UI控制器(Controller)上具有特定接口类型的方法. C4C UI的event handler 在C4 ...

  9. html dom对象常用事件,HTML Dom Event对象onkeydown事件

    语法: οnkeydοwn="SomeJavaScriptCode" onkeydown 事件会在用户按下一个键盘按键时发生, ie浏览器使用event.keyCode获取被按下的 ...

最新文章

  1. 4.AngularJS四大特征之二: 双向数据绑定
  2. matlab 开 闭 代码,C++中的MATLAB函数〔闭锁〕
  3. sqlalchemy mysql教程_python使用SQLAlchemy操作MySQL
  4. 一、自然语言处理概述
  5. mca终端_MCA的完整形式是什么?
  6. 【离散数学】两类有限状态自动机
  7. 可任意自定义的UITableViewCell(转)
  8. 调整home和根分区大小
  9. android获取root修改根目录,代码中获取root权限并随意修改根目录文件
  10. 性能测试基本功 - Centos5.5下安装LAMP
  11. Java实现密码加密
  12. 大学高数常微分方程思维导图_思维导图_2016考研数学:高数中六种常见题型归纳_沪江英语...
  13. 关于ios9中得AddressBook和AddressBookUI框架过时问题
  14. word格式文档在linux打开吗,ubuntu 打开word文档 ubuntu word 文档
  15. Idea无法自动补全代码,ctrl+Alt+v无法使用解决方法
  16. laravel5.6 提示The page has expired due to inactivity. Please refresh and try again.的解决方法
  17. 学习 《电路》(尼尔森著,第十版)第一章笔记(电流)
  18. 倾斜模型精细化处理_无人机倾斜摄影技术的三维精细模型制作
  19. 详解生物地理学优化(BBO)算法(一)
  20. “笨办法”学Python3,Zed A. Shaw,习题15

热门文章

  1. Cocos Creator 写的小游戏
  2. 找女朋友(sdut2109
  3. 使用pandas分析1976年至2010年的美国大选
  4. 检查企业71万余家(次),查处椎
  5. Windows 7使用技巧大全(含键盘快捷键)
  6. .NET CoreRT AOT原生程序编译使用的一些小建议
  7. linux的tar命令之-N参数详解
  8. 小程序根据地址信息获取经纬度导航功能实现
  9. 什么是反射?有什么作用?
  10. 10-15万预算,网上购车平台这几款车型推荐,超低首付购车上私户