一、事件监听者与事件订阅者的区别
二、.具体示例
1.创建事件Test1、Test2
文件目录 app/Events/Test1.php、app/Events/Test2.php
php artisan make:event Test1
php artisan make:event Test1
2.创建事件订阅者
文件目录 app/Listeners/TestEventSubscribe.php
<?php
namespace App\Listeners;
use Illuminate\Support\Facades\Log;
class TestEventSubscribe
{
/**
* 处理Test1事件
*
* @param $event
*/
public function handleTestDoSomething1($event)
{
Log::info('TestEventSubscribe handleTestDoSomething1');
}
/**
* 处理Test2事件
*
* @param $event
*/
public function handleTestDoSomething2($event)
{
Log::info('TestEventSubscribe handleTestDoSomething1');
}
/**
* 为事件订阅者注册事件监听器
*
* @param $event
*/
public function subscribe($event)
{
$event->listen(
'App\Events\Test1',
'App\Listeners\TestEventSubscribe@handleTestDoSomething1'
);
$event->listen(
'App\Events\Test2',
'App\Listeners\TestEventSubscribe@handleTestDoSomething2'
);
}
}
3.注册事件订阅者
文件目录 app/Providers/EventServiceProvider.php
protected $subscribe = [
'App\Listeners\TestEventSubscribe'
];
4.创建控制器
php artisan make:controller TestController
文件目录 app/Http/Controllers/TestController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use App\Events\Test1;
use App\Events\Test2;
class TestController extends Controller
{
/**
* 触发事件Test1
*/
public function test1()
{
Log::info('TestContoller@test1');
event(new Test1());
}
/**
* 触发事件Test2
*/
public function test2()
{
Log::info('TestContoller@test2');
event(new Test2());
}
/**
* 触发事件Test1、Test2
*/
public function test()
{
Log::info('TestContoller@test');
event(new Test1());
event(new Test2());
}
}
5.创建路由
文件目录 routes/web.php
Route::get('/test1', 'TestController@test1');
Route::get('/test2', 'TestController@test2');
Route::get('/test', 'TestController@test');
6.在浏览器访问,并查看日志文件