首先找到\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));
}
}复制代码