首先找到\app\Providers\EventServiceProvider.php
文件。在此文件中咱們加入咱們本身的事件監聽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\SendSms',
],
];
}複製代碼
接着咱們須要運行laravel
php artisan event:generate
複製代碼
上面這一句話運行後,laravel 會爲你在系統目錄中的 App\Event\目錄中生成一個Register的php文件。這個文件就是系統自動幫你生成的事件文件。另外也會生成一個SendSms文件在你的App\Listeners中。細心的你很快就會發現其生成的目錄以及文件就是你最初在laravel的事件服務提供的數組中註冊的內容。數據庫
接下來咱們看下咱們生成事件註冊文件數組
<?php
namespace App\Events;
use App\User;
use App\Events\Event;
use Illuminate\Queue\SerializesModels;
class Register extends Event
{
use SerializesModels;
public $user;
/**
* Create a new event instance.
*
* @param User $user
* @return void
*/
public function __construct(User $user)
{
$this->user = $user;
}
}複製代碼
在上面的事件中,咱們定義了一個$user去接受新註冊的用戶信息,而且經過實例化對象的時候把用戶信息存放起來。正如你所看到的,該事件類不包含任何特定邏輯,只是一個存放 User 對象的容器bash
接下來,讓咱們看看咱們的示例事件的監聽器,事件監聽器在 handle
方法中接收事件實例,event:generate
命令將會自動在 handle
方法中導入合適的事件類和類型提示事件。在 handle
方法內,你能夠執行任何須要的邏輯以響應事件:
app
<?php
namespace App\Listeners;
use App\Events\Register;
class SendSms
{
/**
* Create the event listener.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Handle the event.
*
* @param Register $event
* @return void
*/
public function handle(Register $event)
{
// Access the order using $event->user...
//獲取新註冊的用戶id
$uid = $event->uid
//調用發送信息接口
Sms::send($uid,['register']);
}
}複製代碼
最後咱們怎麼觸發事件呢?只須要在對應邏輯位置中經過event函數調用對應的事件方法便可ide
<?php
namespace App\Htt\Controllers;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function register(Request $request)
{
//獲取參數
//驗證參數
//寫入數據庫
//return 註冊信息
//註冊完成後調用放信息(其中$user是註冊後返回的用戶信息)
event(new Register($user));
}
}複製代碼