sergegogo/pubsub-event 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

sergegogo/pubsub-event

最新稳定版本:1.0.0

Composer 安装命令:

composer require sergegogo/pubsub-event

包简介

PHP Event manager with more flexbility

README 文档

README

Simple PHP event manager package

PubSub Event is a PHP package that provides a flexible and efficient way to manage events and listeners using the Publish-Subscribe (PubSub) pattern. It simplifies event handling and distribution within your system, offering methods to control event execution in an intuitive and dynamic way.

Example

<?php

require __DIR__. "/vendor/autoload.php";

use App\Events\UserCreatedEvent;
use App\Models\UserModel;

$user = new UserModel("Serge Gogo", "serge@gmail.com");
event(new UserCreatedEvent($user))
  ->dispatchIf(fn($event) => $event->user->name !== null);

Features

The package includes the following main methods:

  • dispatchIf($condition): Dispatches an event only if the specified condition is met. This allows events to be triggered conditionally.

  • dispatchOnly($listener): Similar to dispatchIf, but ensures the event is dispatched only one listener in the event listeners array.

  • ignoreIf($condition, $listener): Prevents an event from being dispatched if the specified condition is met. Useful for blocking certain events in specific scenarios.

Installation

To install the package, use composer:

composer require sergegogo/pubsub-event

Example Usage

Create your own class and extends

SergeGogoEvent\Provider\PubSubEventProvider

1. EventServiceProvider.php. after this we must create a event

UserCreatedEvent and listeners SendEmailListener and UserCreatedListener

<?php
namespace App\Providers;

use App\Events\UserCreatedEvent;
use App\Listeners\SendEmailListener;
use SergeGogoEvent\Provider\PubSubEventProvider;

class EventServiceProvider extends PubSubEventProvider
{
    protected $suscribers = [
        UserCreatedEvent::class => [
            SendEmailListener::class,
            UserCreatedListener::class
            //regist more listener here
        ]
    ];

    public function __construct($event)
    {
        parent::__construct($event);
    }
}

2. create your Event (UserCreatedEvent.php) and pass data to the construct magic method

<?php
namespace App\Events;

use App\Models\UserModel;
use SergeGogoEvent\Event\PubSubEvent;

class UserCreatedEvent extends PubSubEvent
{
    public function __construct(public UserModel $user)
    {
        parent::__construct();
    }
}

3. create listeners SendEmailListener and UserCreatedListener for the event.

<?php
namespace App\Listeners;

use App\Events\UserCreatedEvent;

#1st listener
class SendEmailListener
{

    public function handle(UserCreatedEvent $event)
    {
        echo "Send email listener dispatched successfully with data: " . json_encode($event);
    }
}

#2nd listener
<?php
namespace  App\Listeners;

use GoEvent\App\Events\UserCreatedEvent;

class UserCreatedListener
{

    public function handle(UserCreatedEvent $event)
    {
        echo "User created listener dispatched successfully with data: " . json_encode($event->user) . PHP_EOL;
    }
}

4. Finally create a Global function

use App\Providers\EventServiceProvider;

if (!function_exists('event')){
    function event($event){
        return new EventServiceProvider($event);
    }
}
<?php
$user = new UserModel("Serge Gogo", "serge@gmail.com");
event(new UserCreatedEvent($user))
    ->dispatchIf(fn($event) => $event->user->name !== null);

//OUTPUT: Send email listener dispatched successfully with data:  {"user":{"name":"Serge Gogo","email":"serge@gmail.com"}},
//User created listener dispatched successfully with data: {"name":"Serge Gogo","email":"serge@gmail.com"}

The dispatchIf() with callback method has access to all event parameters

统计信息

  • 总下载量: 4
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 1
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2024-12-05