laravel事件监听--模型事件新特性

  • 参考视频

  • 我们使用一个post模型

 PostWasPublished::class  , //key就是事件的名字,值就是触发的事件。这个事件可以是一个完整的类
    ];
}

当执行到这个model里面created方法的时候,会触发PostWasPublished事件。这个事件也就是PostWasPublished类里面的代码。它背后的监听着,其实就是PostWasPublishedListenr类里面的代码

然后我们去EventServiceProvider类里面修改$listen属性

protected $listen = [
        'App\Events\PostWasPublished' => [
            'App\Listeners\PostWasPublishedListenr',
// 如果一个事件需要发送给多个监听者,我们只需要把监听的类写入这个数组里面
        ],
    ];

此时执行php artisan event:generate会生成两个类
Events文件中生成PostWasPublished类,Listeners文件中生成PostWasPublishedListenr类,也就是上面$listen属性定义的两个类。

laravel事件监听--模型事件新特性_第1张图片
生成两个类

PostWasPublished发布类

post = $post;
    }

    /**
     * Get the channels the event should broadcast on.
     *
     * @return Channel|array
     */
    public function broadcastOn()
    {
        return new PrivateChannel('channel-name');
    }
}

PostWasPublishedListenr监听类

post->toArray());
    }
}

路由

注意此处用的是 create  而不是created
Route::get('/', function () {
   return \App\User::create(['name'=>'name','email'=>'[email protected]','password'=>'password']);
});


也可以直接在路由里使用event全局函数做触发
以下方式跟User的模型里面 $events 属性就没有关系了,这是直接触发的
这种打方式会触发两次事件
Route::get('/', function () {
    $user = \App\User::create(['name'=>'name','email'=>'[email protected]','password'=>'password']);
    event(new \App\Events\PostPublished($user));
});

这种方式会触发一次事件
Route::get('/', function () {
    $user = \App\User::find(2);
    event(new \App\Events\PostPublished($user));
});
laravel事件监听--模型事件新特性_第2张图片
图片.png
  • 但是可以监听的事件只有以下函数中的那些
laravel事件监听--模型事件新特性_第3张图片
图片.png

你可能感兴趣的:(laravel事件监听--模型事件新特性)