美文网首页Laravel
laravel之事件

laravel之事件

作者: 二B铅笔 | 来源:发表于2018-03-13 17:38 被阅读14次
快速生成
1.绑定事件和监听器
path:App\Providers\EventServiceProvider

 protected $listen = [
        'App\Events\TestEvent' => [
            'App\Listeners\TestEventListener',
        ],
    ];

2.执行命令,自动生成事件文件 和 监听器文件
   php artisan event:generate

注册事件

1.注入要操作的对象

path:App\Events\TestEvent

class TestEvent{
 ...
  public $user;
  public function __construct(User $user)
    {
       $this->user= $user;
    }
}

监听器(一对一处理事件)

1.handle方法使用注入的对象

path:App\Listeners\TestEventListener

class TestEventListener{
  public function handle(TestEvent $event)
    {
        //事件处理
        //读取事件中注入的对象中的属性
        Log::info($event->user->username);
        // return false;  //在handle中return false会停止事件传播
    }
}

2.队列监听器

继承ShouldQueue接口后,执行到这个监听器时会自动使用队列系统
执行成功会从队列中移除
执行失败时如果配置了failed()方法则调用这个方法来处理错误

path:App\Listeners\TestEventListener

class TestEventListener implements ShouldQueue{
   use InteractsWithQueue;  //用来手动操作队列的trait
    public $connection = 'dl';  //任务应该发送到的队列的连接的名称
    public $queue = 'listeners'; // 任务应该发送到的队列的名称

  public function handle(TestEvent $event)
    {
        //事件处理
        //读取事件中注入的对象中的属性
        Log::info($event->user->username);
        // return false;  //在handle中return false会停止事件传播
        if (true) {
            $this->release(30); //手动操作
        }
    }

  //处理队列任务执行失败
  public function failed(OrderShipped $event, $exception)
    {      
        Log::error('执行失败');
    }
}

3.绑定事件监听器

   path:App\Providers\EventServiceProvider

    //绑定事件和监听器
    protected $listen = [
        'App\Events\TestEvent' => [
            'App\Listeners\TestEventListener',
        ],
    ];

事件订阅者(一对多处理事件)

前面的事件和监听事件是一对一处理,而事件订阅者是指一个类订阅处理多个事件,从而允许你在单个类中定义一些事件处理器

1.创建事件订阅者,注册subscribe方法,监听处理多个事件

path:App\Listeners\TestEventListener

class TestEventListener{
    public function onTask(TestEvent $event)
    {
        //事件处理
        //读取事件中注入的对象中的属性
        Log::info($event->user->user_nickname);
    }

    public function subscribe($events)
    {
       //事件 和对应的处理方法
        $events->listen(
               'App\Events\TestEvent',
               'App\Listeners\TestEventListener@onTask'
          );
     ....
    }
 }

2.绑定事件订阅者

   path:App\Providers\EventServiceProvider

    //绑定事件订阅者
    protected $subscribe = [\App\Listeners\TestEventListener::class];

触发事件

path:App\Http\Controllers\MemberController 

  class MemberController extends BaseController{
    ....
    public function test()
    {
        $user = Member::find(12);  //获取用户Model
        Event(new \App\Events\TestEvent($user));//触发事件,将用户model传入
    }
 }

相关文章

  • Laravel 事件

    laravel 5.1.11 中 注册一个事件 Event 注册一个监听器 写监听事件 在Provides Ev...

  • laravel事件

    Laravel 事件提供了简单的观察者模式实现,允许你订阅和监听应用中的事件。 事件和监听都是阻塞式应用,如果耗时...

  • Laravel 文章汇集

    LARAVEL .ENV文件配数组laravel redis操作大全laravel5篇之使用事务laravel多库...

  • laravel队列、消息通知和观察者模式的理解

    推荐设计模式-PHP观察者设计模式laravel事件监听--模型事件新特性深入了解laravel消费队列的两种工作...

  • Laravel6 最新入门视频教程

    Laravel6 全套入门实战之安装开发环境 Laravel6 全套入门实战之生命周期 Laravel6 全...

  • laravel之pusher应用广播事件

    安装请查看这个文章:https://www.jianshu.com/p/94a7f47e08f4 版本说明 com...

  • Laravel框架小结

    Laravel 5.6 中文文档 & Laravel 5.6 官方文档 Prepare 开发环境 PHP开发 之 ...

  • laravel5.4实现实时聊天室

    一、修改laravel的广播驱动 修改 .env中: 二、创建laravel事件广播 比如要创建一个发送聊天消息的...

  • laravel之事件

    注册事件 1.注入要操作的对象 监听器(一对一处理事件) 1.handle方法使用注入的对象 2.队列监听器 3....

  • Laravel 5.1 事件

    简介 Laravel事件提供了简单的观察者模式实现,允许你订阅和监听应用中的事件。事件类通常存放在app/Even...

网友评论

    本文标题:laravel之事件

    本文链接:https://www.haomeiwen.com/subject/fvnzfftx.html