美文网首页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之事件

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