其实就一句话: Each event can have multiple listeners, but a listener can’t listen to more than a single event. If you want a class listening to many events, you should use the Event Subscribers. 每个事件均可有多个监听器,但是一个监听器只能监听一个事件。如果想在一个类中监听多个事件,就需要适用事件订阅者。
1.创建事件Test1、Test2 文件目录 app/Events/Test1.php、app/Events/Test2.php
php artisan make:event Test1 php artisan make:event Test12.创建事件订阅者 文件目录 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.在浏览器访问,并查看日志文件
