Laravel 5 事件的使用
事件类通常被保存在 app/Events 目录下,而它们的处理程序则被保存在 app/Handlers/Events 目录下。
事件的创建
php artisan make:event CqhTestEvent
<?php namespace App\Events;
use App\Events\Event;
use Illuminate\Queue\SerializesModels;
class CqhTestEvent extends Event {
use SerializesModels;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct()
{
}
}
事件的触发
- 方法一:可以直接用event()函数来触发事件,如下
event(new CqhTestEvent());
- 方法二:也可以用Event facade来触发,如下
$response = Event::fire(new CqhTestEvent());
事件的处理
php artisan handler:event CqhTestEventHandler --event=CqhTestEvent
<?php namespace App\Handlers\Events;
use App\Events\CqhTestEvent;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldBeQueued;
class CqhTestEventHandler {
/**
* Create the event handler.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Handle the event.
*
* @param CqhTestEvent $event
* @return void
*/
public function handle(CqhTestEvent $event)
{
//
}
}
public function handle(CqhTestEvent $event)
{
//
echo 'chenqionghe的事件被处理了';
}
方法一:指定要处理的类
- 在EventServiceProvider的boot方法中指定要处理
<?php namespace App\Providers;
use Illuminate\Contracts\Events\Dispatcher as DispatcherContract;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
class EventServiceProvider extends ServiceProvider {
/**
* The event handler mappings for the application.
*
* @var array
*/
protected $listen = [
'event.name' => [
'EventListener',
],
//在这里加上
'App\Events\CqhTestEvent' => [
'App\Handlers\Events\CqhTestEventHandler',
],
];
...
}
- 在Event::listen()方法中指定
Event::listen('App\Events\CqhTestEvent', 'App\Handlers\Events\CqhTestEventHandler');
方法二:用闭包来处理事件
Event::listen('App\Events\CqhTestEvent', function($event)
{
// 处理事件...
});
public function getTest()
{
Event::listen('App\Events\CqhTestEvent', function($event)
{
echo '触发事件1';
});
Event::listen('App\Events\CqhTestEvent', function($event)
{
echo '触发事件2';
});
Event::listen('App\Events\CqhTestEvent', function($event)
{
echo '触发事件3';
});
event(new CqhTestEvent());
}
触发事件1触发事件2触发事件3
public function getTest()
{
Event::listen('App\Events\CqhTestEvent', function($event)
{
echo '触发事件1';
});
Event::listen('App\Events\CqhTestEvent', function($event)
{
echo '触发事件2';
return false;
});
Event::listen('App\Events\CqhTestEvent', function($event)
{
echo '触发事件3';
});
event(new CqhTestEvent());
}
触发事件1触发事件2
Laravel 5 事件的使用的更多相关文章
- Laravel 模型事件入门
Laravel 模型事件允许你监听模型生命周期内的多个关键点,甚至可以在阻止一个模型的保存或者删除. Laravel 模型事件文档 概述了如何使用钩子将对应事件与相关的事件类型关联起来,但是本文的主旨 ...
- Laravel模型事件的实现原理详解
模型事件在 Laravel 的世界中,你对 Eloquent 大多数操作都会或多或少的触发一些模型事件,下面这篇文章主要给大家介绍了关于Laravel模型事件的实现原理,文中通过示例代码介绍的非常详细 ...
- Laravel之事件
一.事件 事件无处不在,比如用户登录.购买商品.搜索.查看文章,等等,都是事件,有了事件,就有事件监听器,事件监听器监听到事件发生后会执行一些操作,Laravel使用观察者模式来实现这种监听机制.本节 ...
- laravel 模型事件 updated 触发条件
1. 只有 $sku->{attribute} != $sku->getOriginal({attribute}) 不一致的时候才会触发 getDirty() 不为空的时候才触发, 而且不 ...
- laravel中事件的监听和订阅
一.前言 更新员工部门主管的时候,需要重新更新一下缓存,这个会比较耗时.所以计划放到队列中来执行.后来想了想,其实用一下事件监听也能实现.人家都说好,然是我也没感觉到有什么好的. 二.正文 1. 在p ...
- laravel队列,事件简单使用方法
A.队列的使用 1.队列配置文件存储在 config/queue.php 根据自己的情况进行配置 2..env文件 QUEUE_DRIVER=database(根据个人情况配置,redis等) 3.创 ...
- 简单易懂的laravel事件,这个功能非常的有用(监听事件,订阅者模式)
先说一下在什么场景会使用这个事件功能. 事情大概是这样的,需求要在用户注册的时候发一些帮助邮件给用户(原本用户在注册之后已经有发别的邮件的了,短信,IM什么的) 原来这个注册的方法也就10多行代码.但 ...
- Laravel 事件系统用法总结(监听事件,观察者模式)
看这篇文章先复习一下设计模式 : https://www.cnblogs.com/fps2tao/p/9640338.html 在理解了观察者模式后,我们开始正文 Laravel 的事件提供了一个简单 ...
- laravel架构
1.Laravel 5.1 中的异常处理器和HTTP异常处理实例教程 http://laravelacademy.org/post/1867.html 2.laravel 集成sentry,sentr ...
随机推荐
- 40页PPT勾画“互联网颠覆性思维”----诠释互联网思维
本文PPT内容涉及移动互联网的三个分支——移动电商.在线教育和新媒体. 不同领域一直是可以相互借鉴.相互渗透.相互学习的,在盈利模式和思维方式上有很多是共通的.
- 进入做Mvc项目的时候 返现某个文件夹下面css js png等静态文件都访问不了
原来是我在该文件夹下面添加了一个web.config 里面 静止了所有的文件 直接访问 <system.web> <httpHandlers> <add ...
- 利用cmdline和gradle快速编译出apk
http://blog.csdn.net/qq_16628781/article/details/49365139 gradlew.bat clean build --info > bugtag ...
- Python的Descriptor和Property混用
一句话,把Property和Descriptor作用在同一个名字上,就只有Property好使.
- Run same command on all SQL Server databases without cursors
original: https://www.mssqltips.com/sqlservertip/1414/run-same-command-on-all-sql-server-databases-w ...
- vs2010 “最近使用的项目”为空?解决办法!
本文转自http://blog.csdn.net/likaibs/article/details/39576361 谢谢该作者的分享,我在这里继续发扬光大,直接把原文粘贴过来,方便后面的朋友查看. “ ...
- Cubieboard2裸机开发之(二)板载LED交替闪烁
前言 电路原理在文章http://www.cnblogs.com/lknlfy/p/3583806.html中已经说明,两个LED的原理图是一样的.要使两个LED交替闪烁,只需要在点亮蓝色LED,熄灭 ...
- C8051 SMBus 原理
一.SMBus总线 SMBus串行I/O接口完全符合系统管理总线规范 1.1 版.它是一个双线的双向串行总线,与I2C串行总线兼容.系统控制器对总线的读写操作都是以字节为单位的,由SMBus接口自 ...
- List的遍历和删除元素
package test; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public c ...
- 用户Word写毕业论文时的文献引用方法
经过网上搜索和自己实践,找到了一种不用第三方工具的文献管理方法 通过将文献定义的成书签的形式,插入到文献中,当文献编号发生变化时,只需进行更新域操作,就可实现文献编号的理新,下面介绍具体方法: 1.首 ...