通过全局的event()
方法来触发事件,event()
方法的参数为事件实例:
namespace App\Controllers; ... use App\Events\LoginEvent; use Jenssegers\Agent\Agent; class AuthControoler extends Controller { ... public function login(Request $request) { //登录实现 ... //登录成功,触发事件 event(new LoginEvent($this->guard()->user(), new Agent(), \Request::getClientIp(), time())); ... } }
队列化监听器
有时监听器会进行一些耗时操作,这时应该结合Laravel的队列系统将监听器进行队列化,前提是已经配置了队列并开启了队列处理器。
队列化非常简单,只需监听器实现ShouldQueue接口即可,即:
namespace App\Listeners; ... use Illuminate\Contracts\Queue\ShouldQueue; class LoginListener implements ShouldQueue { /** * 失败重试次数 * @var int */ public $tries = 1; ... }
总结
Laravel的事件系统实现起来还是非常优雅的,同一个事件可以很方便的添加各类监听器,且各个监听器之间互不干扰,解耦性非常强。加上队列系统,可以很方便的处理一些后续任务。
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。