前言
在开始本文的正文之前,我们先说一下在什么场景会使用这个事件功能。
事情大概是这样的,需求要在用户注册的时候发一些帮助邮件给用户(原本用户在注册之后已经有发别的邮件的了,短信,IM什么的)
原来这个注册的方法也就10多行代码。但是有时候我们为了省事,直接在注册代码后面添加了各种代码。
例如这个注册方法本来是这样的
<?phpnamespace App/Htt/Controllers;use Illuminate/Http/Request;class UserController extends Controller{ public function register(Request $request) { //获取参数 //验证参数 //写入数据库 //return 注册信息 }}
现在有一个需求,要求注册之后给用户的邮箱发一个广告,绝大多数的人(也包括以前的我)就直接在这后面接着写代码了
<?phpnamespace App/Htt/Controllers;use Illuminate/Http/Request;class UserController extends Controller{ public function register(Request $request) { //获取参数 //验证参数 //写入数据库 //发送广告邮件 //return 注册信息 }}
这是比较直观的写法,后来又有需求要发个短信。
<?phpnamespace App/Htt/Controllers;use Illuminate/Http/Request;class UserController extends Controller{ public function register(Request $request) { //获取参数 //验证参数 //写入数据库 //发送广告邮件 //发送短信 //return 注册信息 }}
然后又有需求,要发IM消息,这样的需求很多。这些方法如果你封装了,可能也就一行代码。
但是,在实际项目中,这个注册方法里面已经加了很多东西。如果多人开发的话各种不方便。然后想到了laravel似乎有这个功能,但是一直都不知道怎么应用,仔细看了一下手册,发现和自己的想法不谋而合。
laravel的事件功能实际上更倾向是一种管理手段,并不是没了它我们就做不到了,只是它能让我们做得更加好,更加优雅。
laravel的事件是一种管理+实现的体现,它首先有一个总的目录,然后我们可以宏观的看到所有的事件,而不需要每次都要打开控制器的方法我们才能知道注册后会发生什么,这一点很重要,非常的方便,我就不按着laravel的顺序来讲,而是按着实际情况来建立这种关系。
现在我们无非就是要在注册之后要做一系列的事情,首先得注册完之后调用一个事件,然后这个事件再做各种各样的事
<?phpnamespace App/Htt/Controllers;use Illuminate/Http/Request;//我们先引入一个事件类,名字自定义的,之后再一步一步创建use App/Events/Register;class UserController extends Controller{ public function register(Request $request) { //获取参数 //验证参数 //写入数据库 //触发事件,以后所有需要注册后要做的事情,都不需要再这里加代码了,我们只需要管理事件就好了 //event方法是laravel自带方法, $uid是外部参数,看你需要做什么,传什么参数了。注册之后肯定有$uid的嘛 event(new Register($uid)); //return 注册信息 }}
新闻热点
疑难解答