在非 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),所以都需要在使用时进行手动绑定,待优化。

参考 致谢

  1. mattstauffer/Torch
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!