Yii2 event-如何使用事件
这里说的是通过行为的方式绑定事件
- 定义行为事件类: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-如何使用事件相关推荐
- Yii2 event tigger 关于事件的简单使用
首先需要明白事件是什么?在什么情况下使用?使用它带来了什么好处? 基于官方 https://www.yiiframework.com/doc/guide/2.0/zh-cn/concept-event ...
- VC++中多线程学习(MFC多线程)三(线程同步包含:原子互锁、关键代码段、互斥器Mutex、Semaphores(信号量)、Event Objects(事件))
目录 线程同步的必要性: 2.解决同步问题的方法 2.1原子互锁家族函数 2.2Critical Sections(关键代码段.关键区域.临界区域) 2.3 互斥器Mutex ...
- 事件根基event_base、事件循环event_loop、事件event、信号事件SignalEvent
一.event_base (一) libevent简介与浅谈event_base libevent实际上就是对底层select/poll/epoll等进行了封装,每个event_base都有一种&qu ...
- Google Map Event 谷歌地图事件
https://blog.csdn.net/lihefei_coder/article/details/73832664 Google Map Event 谷歌地图事件
- IP Event Dampening (IP事件惩罚)
IP Event Dampening(IP事件惩罚) 目前仅支持static.RIP.OSPE.EIGRP.IS-IS.BGP.HSRP,不支持子接口.虚拟接口. 作用:当接口处于不稳定的状态,不断翻 ...
- Activiti 中的 Start event(启动事件元素)介绍
Start event(启动事件元素) 启动事件元素就是启动流程实例的,也就是发起一个流程的,是流程的起点.它可以配置的很简单,也可以很复杂. StartEvent:空启动事件.它的属性介绍如下: I ...
- (十三)事件分发器——event()函数,事件过滤
事件分发器--event()函数 事件过滤 事件进入窗口之前被拦截 eventFilter #include "mywidget.h" #include "ui_mywi ...
- SAP CRM和Cloud for Customer中的Event handler(事件处理器)
SAP CRM可以在开发工具中用右键直接创建一个新的事件处理器: 这些事件处理器实际上就是UI控制器(Controller)上具有特定接口类型的方法. C4C UI的event handler 在C4 ...
- html dom对象常用事件,HTML Dom Event对象onkeydown事件
语法: οnkeydοwn="SomeJavaScriptCode" onkeydown 事件会在用户按下一个键盘按键时发生, ie浏览器使用event.keyCode获取被按下的 ...
最新文章
- 4.AngularJS四大特征之二: 双向数据绑定
- matlab 开 闭 代码,C++中的MATLAB函数〔闭锁〕
- sqlalchemy mysql教程_python使用SQLAlchemy操作MySQL
- 一、自然语言处理概述
- mca终端_MCA的完整形式是什么?
- 【离散数学】两类有限状态自动机
- 可任意自定义的UITableViewCell(转)
- 调整home和根分区大小
- android获取root修改根目录,代码中获取root权限并随意修改根目录文件
- 性能测试基本功 - Centos5.5下安装LAMP
- Java实现密码加密
- 大学高数常微分方程思维导图_思维导图_2016考研数学:高数中六种常见题型归纳_沪江英语...
- 关于ios9中得AddressBook和AddressBookUI框架过时问题
- word格式文档在linux打开吗,ubuntu 打开word文档 ubuntu word 文档
- Idea无法自动补全代码,ctrl+Alt+v无法使用解决方法
- laravel5.6 提示The page has expired due to inactivity. Please refresh and try again.的解决方法
- 学习 《电路》(尼尔森著,第十版)第一章笔记(电流)
- 倾斜模型精细化处理_无人机倾斜摄影技术的三维精细模型制作
- 详解生物地理学优化(BBO)算法(一)
- “笨办法”学Python3,Zed A. Shaw,习题15