1. Go to this page and download the library: Download ahloul/rabbitevents-mod library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
$model = new SomeModel(['name' => 'Jonh Doe', 'email' => '[email protected]']);
$someArray = ['key' => 'item'];
$someString = 'Hello!';
// Example 1. Old way to publish your data. Will be deprecated it next versions.
// Remember: You MUST pass array of arguments
fire('something.happened', [$model->toArray(), $someArray, $someString]);
// Example 2. Method `publish` from `Publishable` trait
SomeEvent::publish($model, $someArray, $someString);
$someEvent = new SomeEvent($model, $someArray, $someString);
// Example 3. Use helper `publish`
publish($someEvent);
// Example 4. You could use helper `publish` as you used to use helper `fire`
publish('something.happened', [$model->toArray(), $someArray, $someString]);
publish($someEvent->publishEventKey(), $someEvent->toPublish());
/**
* The event listener mappings for the application.
*
* @var array
*/
protected $listen = [
'item.created' => [
'App\Listeners\SendItemCreatedNotification',
'App\Listeners\ChangeUserRole',
],
];
/**
* The event listener mappings for the application.
*
* @var array
*/
protected $listen = [
'item.*' => [
'App\Listeners\ItemLogger',
],
];
namespace App\Listeners;
class ItemLogger
{
/**
* Handle the event.
*
* @param array $payload
* @return void
*/
public function handle(array $payload)
{
log(...);
}
}
namespace App\Listeners;
class ItemLogger
{
/**
* Handle the event.
*
* @param string $event
* @param array $payload
* @return void
*/
public function handle(string $event, array $payload)
{
if ($event === 'item.created') {
// do something special
}
log(...);
}
}
/**
* Hadle payment but only if a type is 'mytype'
*
* @param array $payload
* @return void
*/
public function handle($payload)
{
if (\Arr::get($payload, 'entity.type') !== 'mytype') {
return;
}
Entity::find(\Arr::get($payload, 'entity.id'))->activate();
}
namespace App\Listeners\RabbitEvents\Middleware;
class FilterEntities
{
/**
* @param string $event Event Name. Passing only fpr wildcard events
* @param array $payload
*/
public function handle([$event,] $payload)
{
return !\Arr::get($payload, 'entity.type') == 'mytype';
}
}
use App\Listeners\RabbitEvents\Middleware\FilterEntities;
class PaymentListener
{
public array $middleware = [
FilterEntities::class,
`App\Listeners\RabbitEvents\Middleware\AnotherMiddleware@someAction`,
];
/**
* @param string $event Event Name. Passing only for wildcard events
* @param array $payload
*/
public function middleware([$event, ]$payload)
{
return !\Arr::get($payload, 'entity.type') == 'mytype';
}
}
namespace App\Observers;
use App\User;
class UserObserver
{
/**
* Handle the user "created" event.
*
* @param \App\User $user
* @return void
*/
public function created(User $user)
{
publish('User.created', $user->toArray());
}
/**
* Handle the user "updated" event.
*
* @param \App\User $user
* @return void
*/
public function updated(User $user)
{
publish('User.updated', $user->toArray());
}
/**
* Handle the user "deleted" event.
*
* @param \App\User $user
* @return void
*/
public function deleted(User $user)
{
publish('User.deleted', $user->toArray());
}
/**
* Handle the user "restored" event.
*
* @param \App\User $user
* @return void
*/
public function restored(User $user)
{
publish('User.restored', $user->toArray());
}
/**
* Handle the user "force deleted" event.
*
* @param \App\User $user
* @return void
*/
public function forceDeleted(User $user)
{
publish('User.forceDeleted', $user->toArray());
}
}
namespace App\Providers;
use App\User;
use App\Observers\UserObserver;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
User::observe(UserObserver::class);
}
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
//
}
}
namespace App\BroadcastEvents;
use RabbiteventsMod\Events\Event\Publishable;
use RabbiteventsMod\Events\Event\ShouldPublish;
use RabbiteventsMod\Events\Event\Testing\PublishableEventTesting;
class Event implements ShouldPublish
{
use Publishable;
use PublishableEventTesting;
public function __construct(private array $payload)
{
}
public function publishEventKey(): string
{
return 'something.happened';
}
public function toPublish(): array
{
return $this->payload;
}
}
use \App\BroadcastEvents\Event;
use \App\BroadcastEvents\AnotherEvent;
Event::fake();
$payload = [
'key1' => 'value1',
'key2' => 'value2',
];
Event::publish($payload);
Event::assertPublished('something.happened', $payload);
AnotherEvent::assertNotPublished();