业务层的事件、队列、模型
事件
- Laravel 事件系统用法总结
- 举例,处理用户注册(register)功能的时候,我们经常会把发送欢迎邮件和订阅新闻简报的逻辑紧密耦合到了register方法里, 根据关注点分离原则,register方法不应该关心发送欢迎邮件和订阅新闻简报的具体实现。提供事件的监听和接收就可以解耦。
- 使用方法如下:
- php artisan make:event UserRegistered和php artisan make:listener SendWelcomeMail --event=UserRegistered
- 触发事件:event(new UserRegistered($user));
- 处理事件:在SendWelcomeMail的handle()中处理
- 处理事件(异步处理):
- SendWelcomeMail需要继承ShouldQueue,把事件存入队列
- php artisan queue:work,这个时候才会调用SendWelcomeMail的handle()
队列
- Laravel 队列基本操作
- Laravel 的消息队列剖析
- 延迟队列使用了三个队列:
- queue:default:delayed // 存储延迟任务
- queue:default // 存储未处理任务
- queue:default:reserved // 存储待处理任务
- 使用方法如下:
- 创建队列类:php artisan make:job Demo,类要继承ShouldQueue
- 生成队列:Demo::dispatch($args);
- php artisan queue:work,这个时候才会调用Demo的handle()
模型Observer
- Laravel 中的模型事件与 Observer
- Eloquent 的操作会产生模型事件,我们可以通过添加"模型Observer"来做一些业务处理。添加"模型Observer"是基于laravel的事件的。
- 使用方法如下:
- php artisan make:observer UserObserver --model=User
- 在 AppServiceProvider 类的boot()中注册User::observe(UserObserver::class);
模型Notifications
- 个人认为"模型Notifications"是"模型Observer"的子集,是一套消息通知系统,通知频道有数据库、邮件、短信等。
- Laravel 文档-消息通知
- 使用方法如下:
- php artisan make:notification UserNotification
- 调用方法1:$user->notify(new UserNotification($args)); notify方法是模型自带的
- 调用方法2:\Notification::send($user, new UserNotification($args));
- 如果要把消息队列化,UserNotification需要继承ShouldQueue,并使用Queueable的trait
模型Policy
- Laravel Policy 使用
- 建议用户授权就用"模型Policy"而不要用门面Gate类
- 使用方法如下:
- php artisan make:policy PostPolicy
- laravel 5.8以下的版本需要在AuthServiceProvider类的$policies属性注册PostPolicy
- 在控制器中使用:$this->authorize('update', $post);
- 在视图中使用:@can("update", $post)