事件,我们可以简单理解为执行一个方法后,还需要关联执行的方法。打个比方,当我们注册一个账号后,需要告诉他这个账号所在地区的人。那么,这个时间我们就可以用事件来操作。当然,你也完全不用事件这个东东,全都写在一个函数里面。只是说用事件为了代码显得更合理,之后优化也更方便。下面,我就以购买东西后发送一份邮件为例来说明一下。
php artisan make:event BuyShop #注册事件(事件名 BuyShop )
php artisan make:listener BuyShopSendEmail --event=BuyShop #注册事件的监听器,注意后面的名字需要和事件名一致
1、控制器的代码(应该都能看懂,我就不多说)
<?php
namespace Modules\Test\app\Http\Controllers;
use App\Http\Controllers\Controller;
use App\Events\BuyShop; //引入刚注册的事件名字
class BuyController extends Controller{
public function __construct(){
}
public function submitBuy(){
//购买商品的一些逻辑
$res = [
'id' => 5,
'name' => 'xiaobing',
'age' => 15,
'sex' => 'boy'
];
event(new BuyShop($res));
}
}
?>
2、在事件的方法中,我们这样写代码(其实,这儿啥也没干,就只是在构造函数里面赋了一个值)
// App\Events\BuyShop.php;
public $users;
public function __construct($users)
{
//
$this->users = $users;
}
3、在监听的文件中,我们这样写
//App\Listeners\BuyShopSendEmail.php
public function handle(BuyShop $event): void
{
//这里就是我需要执行的操作了
//比如,执行的事件中,我需要做些什么,都在宛和了
//$event 就是我刚在控制器中丢过来的内容
var_dump($event);
}
4、最后,别忘了在 EventServiceProvider.php 的文件中去注册事件
// App\Providers\EventServiceProvider.php
//这个文件本身就有的
protected $listen = [
Registered::class => [
SendEmailVerificationNotification::class,
],
'App\Events\SendEmail' => [
"App\Listeners\ListenSendEmail1"
],
// App\Events\BuyShop 就是需要注册的事件
'App\Events\BuyShop' => [
'App\Listeners\BuyShopSendEmail'
]
];