标签:
## Laravel5新特性 - Events & Handlers
事件是系统开发中非常重要的一部分,可以在一次编码后只需修改事件规则,无需更改流程代码。比如商城站,用户在登陆之后,系统会做两件事情:
1. 给新用户发送站内信,欢迎新用户;
2. 发送欢迎邮件;
如果按照原始的程序,会在注册完成之后触发一系列动作函数。但如果后期站内除了折扣码,我们不得不修改核心流程,添加折扣码处理函数。每添加一个动作必须修改核心流程,显然不符合最佳代码规范,我们可以将用户注册完成之后触发的一系列动作封装起来,于是便出现了事件。
laravel4中已经有了事件的概念,不过目录文件并没有默认创建,需要我们自己创建,再在composer配置文件中新加事件目录即可,具体操作大家可以查看laravel4官方文档。
Laravel4中事件的触发依赖事件的名称:
$response = Event::fire(‘auth.login‘, array($user));
而Laravel5则不再使用这种方式,通常直接new一个php对象;
我们直接上栗子:
### 第一步:使用命令新建Event
php artisan make:event CacheEvent
将会创建如下Event:
<?php namespace App\Events;
use App\Events\Event;
use Illuminate\Queue\SerializesModels;
class CacheEvent extends Event {
use SerializesModels;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct()
{
//
}
}
### 第二步:使用命令新建Handler
php artisan handler:event CacheRouteHandler --event="CacheEvent"
将会创建以下Handler
<?php namespace App\Handlers\Events;
use App\Events\CacheEvent;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldBeQueued;
class CacheRouteHandler {
/**
* Create the event handler.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Handle the event.
*
* @param ThingWasDone $event
* @return void
*/
public function handle(CacheEvent $event)
{
//初始化一些必要的缓存
}
}
大家发现自动生成event已经做好了方法注入,当然你也可以在construct函数里面注入绑定,然后在定义全局对象即可;
### 第三步:绑定Event和Handler
ok,创建好了event和Handler,我们还需要将它们绑定起来。文件在`app\Providers\EventServiceProvider`:
// app\Providers\EventServiceProvider
protected $listen = [
‘App\Events\CacheEvent‘ => [
‘App\Handlers\Events\CacheRouteHandler‘,
...
],
];
### 第四步:Fire
\Event::fire(new App\Events\CacheEvent());
ok,截止目前,我们已经会使用了laravel5中的事件。当然,事件也是可以绑定参数的,网上找到一个参数传递的栗子,大家可以参考下:
class SidebarEvent {
public $first;
public $second;
public $third;
public function __construct($first, $second, $third) {
$this->first = $first;
$this->second = $second;
$this->third = $third;
}
public function getData()
{
return [
‘first‘ => $this->first,
‘second‘ => $this->second,
‘third‘ => $this->third,
];
}
}
获取参数
class SidebarNavigationListener
{
public function handle(SidebarEvent $event)
{
dd($event->getData());
}
}
使用参数
Event::fire(new SidebarEvent(‘1‘, ‘2‘, ‘3‘));
小白巷之Laravel5的新特性 - Events & Handlers
标签:
原文地址:http://www.cnblogs.com/jroy/p/9479cad5b381400909924de7ae232340.html