在非 laravel 项目中使用 laravel 的特性 11: Event && Listener
Event && Listener
安装所需的扩展包
composer require illuminate/events
新建 event 文件 src/Events/UserHasRegisteredEvent.php
<?php
namespace App\Events;
class UserHasRegisteredEvent
{
protected $username;
public function __construct($username)
{
$this->username = $username;
}
public function getUsername()
{
return $this->username;
}
}
新建 listener 文件 src/Listeners/SendWelcomingEmail.php
<?php
namespace App\Listeners;
use App\Events\UserHasRegisteredEvent;
class SendWelcomingEmail
{
public function handle(UserHasRegisteredEvent $event)
{
echo $event->getUsername() . ', welcome to my world!';
}
}
项目根目录新建入口 index/event.php
<?php
include __DIR__ . '/../vendor/autoload.php';
use App\Events\UserHasRegisteredEvent;
use App\Listeners\SendWelcomingEmail;
$dispatcher = new \Illuminate\Events\Dispatcher();
// Defining the listeners
$dispatcher->listen([UserHasRegisteredEvent::class], SendWelcomingEmail::class);
// Firing the event
$dispatcher->dispatch(new UserHasRegisteredEvent('Joey'));
命令行开启服务 php -S localhost:8000
并访问 http://localhost:8000/index/event.php
即可。
由于没有统一的观察者绑定入口 (laravel 中的 EventServiceProvider),所以都需要在使用时进行手动绑定,待优化。
参考 致谢
本作品采用《CC 协议》,转载必须注明作者和本文链接