🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
`php artisan make:event` 创建一个新的event的class,他会放在app\Events这个目录,目前这个目录就Event.php系统的抽象类 `php artisan make:listen` 创建一个监听者,会放在 `app\Listeners` 这个目录下面 `php artisan event:generate` 这个命令会循环输出 `app\Providers\EventServiceProvider.php `文件中下面的数组 ~~~ protected $listen = [ 'App\Events\UserSignup' => [ 'App\Listeners\HandleUserSignup', ], ]; ~~~ 运行一下,创建文件.在事件中要传递数据的话可以通过构造方法传递 在` App\Events\UserSignup.php `文件中写 ~~~ use SerializesModels; public $user; /** * Create a new event instance. * * @return void */ public function __construct($user) { //构造方法中写$user来传参数,实际中可以传递userid或者其他 //注意我们要设置个public $user; $this->user=$user; } ~~~ 这边event写完了,他只是传递个变量 在`App\Listeners\HandleUserSignup.php`文件中编辑业务处理代码 ~~~ namespace App\Listeners; use App\Events\UserSignup; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Contracts\Queue\ShouldQueue; class HandleUserSignup { public $filesystem; /** * Create the event listener. * * @return void */ public function __construct()//参数Filesystem $filesystem没写命名空间注释掉了 { //形参注入你想要的依赖 //写个形参依赖注入,写入到public $filesystem这个变量中 //不要忘记写public $filesystem // $this->filesystem=$filesystem; } /** * Handle the event. * * @param UserSignup $event * @return void */ public function handle(UserSignup $event) { //处理UserSignup这个事件 //可以用\Mail类来发送邮件,或者干别的事 dump($event->user);//写event就可以拿到他的user,打印这个user } } ~~~ 路由中写 ~~~ Route::get('/', function () { $user=\App\User::find(1); //从数据库取一条记录传递给事件 event(new \App\Events\UserSignup($user)); // return view('welcome'); }); ~~~ 这样就形成了一个事件,路由中传递传输给事件,事件构造方法注入到public $user然后监听者在handle里面就可以拿到这个事件的public $user进行操作! 事件传递数据,监听者处理业务逻辑. 其实监听器中handle可以放到控制器中,为什么用handle,就是让我们代码可伸缩性强 那么事件触发的标志是什么呢? 是`event(new \App\Events\UserSignup($user));`这个代码,就触发了事件 更多用法 打开`App\Events\UserSignup`文件,你可以看到`use Illuminate\Contracts\Broadcasting\ShouldBroadcast; `如果要实现socket进行实施通信,可以 `class UserSignup extends Event implements ShouldBroadcast` 可以将事件广播到所有客户端.