numesia/laravel-events

Laravel 包,帮助组件间发送事件

0.0.13 2022-10-03 13:05 UTC

This package is auto-updated.

Last update: 2024-09-30 01:54:29 UTC


README

Laravel 包,帮助组件间发送事件

此 Laravel 事件包是一个私有包,所以我们不能直接使用 composer 来 require 它,因此我们必须添加一个 vcs 仓库来告诉 composer 从哪个 URL 加载该包。

"repositories": [
    {
        "type": "vcs",
        "url":  "git@github.com:NUMESIA/NU_EVENT_LaravelPackage.git"
    }
],
"require": {
    "NUMESIA/laravel-events": "0.0.*"
},

完成此操作后,您需要将服务提供者添加到 app.php 配置文件中的 providers 数组中,如下所示

Numesia\NuEvent\Providers\NuEventServiceProvider::class,

接下来,同样在 app.php 配置文件中,在 aliases 数组下,您可能希望添加 NuEvent 门面。

'NuEvent' => Numesia\NuEvent\Facades\NuEvent::class,

然后发布配置

php artisan vendor:publish --provider="Numesia\NuEvent\Providers\NuEventServiceProvider" --tag=config

最后,您需要将 NUEVENT_TOKEN 键从 .env 文件中更改

NUEVENT_TOKEN=YourEventSecretKey

如何使用?

NuEvent 提供了一个全局函数 nuEvent(),帮助您轻松地将事件发送到其他组件

    /**
     * Send an event to components
     *
     * @param      <string>     $eventName   The event name
     * @param      <string>     $eventData   The event data
     * @param      <mixed>      $components  The components
     * @param      <closure>    $callback    The callback
     */
    function nuEvent($eventName, $eventData, $components = null, $callback)

$components 可以是一个字符串(bpm),一个数组 ['bpm', 'cms'] 或空,以广播到所有组件

如果您想执行相同的任务,也可以使用 Facade NuEvent

/**
 * Emit event to component name
 *
 * @param      <string>  $componentName  The component name
 * @param      <string>  $eventName      The event name
 * @param      <string>  $eventData      The event data
 */
NuEvent::emit($componentName, $eventName, $eventData)

/**
 * Broadcast event to all components
 *
 * @param      <string>  $eventName   The event name
 * @param      <string>  $eventData   The event data
 */
NuEvent::broadcast($eventName, $eventData)

/**
 * Dispatch event to selected components
 *
 * @param      <string>  $eventName   The event name
 * @param      <string>  $eventData   The event data
 * @param      <mixed>   $components  The components
 */
NuEvent::dispatch($eventName, $eventData, $components = null)

/!\ 当您发送事件时,NuEvent 会自动将后缀 'nuEvents:' 添加到您的事件名称中

示例

在这个示例中,我们将尝试从 book 发送事件到 bpm

BOOK 组件

我们只需要在某个地方添加此命令

nuEvent('book.ping', "Hello World", "bpm");

BPM 组件

我们应该创建一个监听器(别忘了将其添加到 EventServiceProvider 中)

  • EventServiceProvider
//EventServiceProvider
protected $subscribe = [
    'App\Listeners\NuEventSubscriber',
];
  • NuEventSubscriber
// App\Listeners\NuEventSubscriber
<?php

namespace App\Listeners;

use App\Jobs\SendNotification;

class NuEventSubscriber
{
    /**
     * Listening ActivityWasAborted event
     */
    public function onBookPing($event)
    {
        \Log::info($event);
    }

    /**
     * Register listeners for the subscriber
     *
     * @param Illuminate\Events\Dispatcher $events
     */
    public function subscribe($events)
    {
        $events->listen(
            'nuEvents:book.ping',
            'App\Listeners\NuEventSubscriber@onBookPing'
        );
    }
}