laravel 事件机制 实践总结

laravel 事件机制 实践总结

观察者模式
  • 在EventServiceProvider的linsten数组里面加上事件和监听器,键名是事件,键值里面的数组是一个或者多个监听器,
protected $listen = [
    'App\Events\Event' => [
        'App\Listeners\EventListener',
    ],
    'App\Events\SendPhoneCodeEvent' => [
        'App\Listeners\SendPhoneCodeListener',
    ],
];
  • 生成监听和事件文件 php artisan event:generate
  • 编辑Event类
    • 可以添加属性来传递数据,添加方法来传递回调
  • 编辑Listener类
    • 在handle方法中编辑监听逻辑
  • 触发事件 调用全局函数event(),传入事件对象;
    • event(new SendPhoneCodeEvent($data));
发布订阅模式
  • 编辑订阅类 ,实质就是一个调度中心
<?php
/**
 * Created by PhpStorm.
 * User: liutengfei
 * Date: 2018/12/25
 * Time: 18:45
 */
namespace App\Listeners;
use App\Events\SomeEvent;
use App\Events\TestEvent;

class TaskToLogListener
{
    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    public function someEventTask(SomeEvent $event)
    {
        echo 'uuuu'."\n" ;
    }

    public function testEventTask(TestEvent $event)
    {
        echo 'iiioo'."\n";
    }

    //这里是订阅中心,这里既可以调用自己,也可以分发到其他监听者
    public function subscribe($events)
    {
       $events->listen('App\Events\SomeEvent','App\Listeners\TaskToLogListener@someEventTask');


        $events->listen('App\Events\TestEvent','App\Listeners\Test2Listener@Handel');
        
 $events->listen('App\Events\TestEvent','App\Listeners\Test1Event@Handel');

    }
}
  • 在EventServiceProvider添加属性$subscribe
    • protected $subscribe = [TaskToLogListener::class];
  • 触发事件
Event::fire(new TaskAdded($task));
Event::fire(new TaskDeled($task));

猜你喜欢

转载自www.cnblogs.com/frankltf/p/10178044.html
今日推荐