《PHP教程:分享個簡單易懂且非常有用的laravel事件》要點:
本文介紹了PHP教程:分享個簡單易懂且非常有用的laravel事件,希望對您有用。如果有疑問,可以聯系我們。
前言PHP教程
在開始本文的正文之前,我們先說一下在什么場景會使用這個事件功能.PHP教程
事情大概是這樣的,需求要在用戶注冊的時候發一些幫助郵件給用戶(原本用戶在注冊之后已經有發別的郵件的了,短信,IM什么的)PHP教程
原來這個注冊的方法也就10多行代碼.但是有時候我們為了省事,直接在注冊代碼后面添加了各種代碼.PHP教程
例如這個注冊方法本來是這樣的PHP教程
<?php namespace App\Htt\Controllers; use Illuminate\Http\Request; class UserController extends Controller { public function register(Request $request) { //獲取參數 //驗證參數 //寫入數據庫 //return 注冊信息 } }
現在有一個需求,要求注冊之后給用戶的郵箱發一個廣告,絕大多數的人(也包括以前的我)就直接在這后面接著寫代碼了PHP教程
<?php namespace App\Htt\Controllers; use Illuminate\Http\Request; class UserController extends Controller { public function register(Request $request) { //獲取參數 //驗證參數 //寫入數據庫 //發送廣告郵件 //return 注冊信息 } }
這是比較直觀的寫法,后來又有需求要發個短信.PHP教程
<?php namespace App\Htt\Controllers; use Illuminate\Http\Request; class UserController extends Controller { public function register(Request $request) { //獲取參數 //驗證參數 //寫入數據庫 //發送廣告郵件 //發送短信 //return 注冊信息 } }
然后又有需求,要發IM消息,這樣的需求很多.這些方法如果你封裝了,可能也就一行代碼.PHP教程
但是,在實際項目中,這個注冊方法里面已經加了很多東西.如果多人開發的話各種不方便.然后想到了laravel似乎有這個功能,但是一直都不知道怎么應用,仔細看了一下手冊,發現和自己的想法不謀而合.PHP教程
laravel的事件功能實際上更傾向是一種管理手段,并不是沒了它我們就做不到了,只是它能讓我們做得更加好,更加優雅.PHP教程
laravel的事件是一種管理+實現的體現,它首先有一個總的目錄,然后我們可以宏觀的看到所有的事件,而不需要每次都要打開控制器的方法我們才能知道注冊后會發生什么,這一點很重要,非常的方便,我就不按著laravel的順序來講,而是按著實際情況來建立這種關系.PHP教程
現在我們無非就是要在注冊之后要做一系列的事情,首先得注冊完之后調用一個事件,然后這個事件再做各種各樣的事PHP教程
<?php namespace 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 注冊信息 } }
找到\app\Providers\EventServiceProvider.php文件.給它添加關系,告訴系統,有人用event()
調用了事件之后要被誰監聽得到.PHP教程
<?php namespace App\Providers; use Laravel\Lumen\Providers\EventServiceProvider as ServiceProvider; class EventServiceProvider extends ServiceProvider { /** * The event listener mappings for the application. * * @var array */ protected $listen = [ // 用戶注冊后的事件 'App\Events\Register' => [ // 發送廣告郵件 'App\Listeners\SendAdMail', // 發送短信 'App\Listeners\SendSms', // 發送幫助信息 'App\Listeners\SendHelpInformation', ], ]; }
這里是注冊事件的入口,相當于一個總目錄,這樣就可以跟注冊代碼解耦了,以后要加東西我們就不需要再去看注冊方法的代碼了PHP教程
現在注冊完之后會觸發這個App\Events\Register類,然后這個類會被App\Listeners\SendAdMail,App\Listeners\SendSms,App\Listeners\SendHelpInformation監聽得到,我們進入app\Events目錄,創建Register這個類PHP教程
<?php namespace App\Events; class Register { public $uid; /** * 創建一個新的事件實例. * * @param Order $order * @return void */ public function __construct($uid) { $this->uid = $uid; } }
這樣就可以了.PHP教程
然后去app\Listeners目錄創建各種要做的事件監聽類.PHP教程
<?php namespace App\Listeners; use App\Events\Register; use App\Models\User; use Illuminate\Contracts\Queue\ShouldQueue; class SendHelpInformation implements ShouldQueue { public function __construct() { // } public function handle(Register $event) { $uid = $event->uid; $user = User::find($uid); //......各種實現 } }
這個handle方法就是我們要做的具體實現了,有個很方便的功能就是如果implements ShouldQueue這個接口的話就會異步隊列執行,如果去掉的話就是同步執行.很方便有沒有,這樣代碼就解耦了,不需要再管注冊代碼了,在這里就能很方便的管理了.多人開發也是單獨寫自己的Listeners就可以了.PHP教程
具體的建議大家去看看手冊吧,有些內容我這里就不完全說了.我只是拋磚引玉PHP教程
總結PHP教程
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持.
PHP教程
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/263.html