PHP code example of denismitr / laravel-event-recorder
1. Go to this page and download the library: Download denismitr/laravel-event-recorder 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/ */
denismitr / laravel-event-recorder example snippets
class MoneyAddedToWallet implements ShouldBeRecorded
{
/**
* @var Wallet
*/
public $wallet;
/**
* @var int
*/
public $amount;
/**
* MoneyAddedToWallet constructor.
* @param Wallet $wallet
* @param int $amount
*/
public function __construct(Wallet $wallet, int $amount)
{
$this->wallet = $wallet;
$this->amount = $amount;
}
public function getProperties(): array
{
return [
'wallet_id' => $this->wallet->id,
'amount' => $this->amount,
'user_id' => $this->wallet->user_id,
'operation' => 'credit',
];
}
public function getDescription(): string
{
return vsprintf("User with ID %s added %d to the wallet with ID %s", [
$this->wallet->user_id,
$this->amount,
$this->wallet->id,
]);
}
}
class MoneyAddedToWallet extends ConditionallyRecordable
{
use TriggeredByUser;
/**
* @var Wallet
*/
public $wallet;
/**
* @var int
*/
public $amount;
/**
* @var bool
*/
public $byAdmin;
/**
* MoneyAddedToWallet constructor.
* @param Wallet $wallet
* @param int $amount
* @param bool $byAdmin
*/
public function __construct(Wallet $wallet, int $amount, $byAdmin = false)
{
$this->wallet = $wallet;
$this->amount = $amount;
$this->byAdmin = $byAdmin;
}
public function getProperties(): array
{
return [
'wallet_id' => $this->wallet->id,
'amount' => $this->amount,
'user_id' => $this->getTriggeredById(),
'operation' => 'credit',
];
}
public function getDescription(): string
{
return vsprintf("User with ID %s added $%d to the wallet with ID %s", [
$this->getTriggeredById(),
$this->amount,
$this->wallet->id,
]);
}
// This method overrides default implementation
// that always return false
public function shouldBeSkipped(): bool
{
// skip events generated by admin action
return !! $this->byAdmin;
}
}
event(new MoneyAddedToWallet($this->wallet, 1234));
$recordedEvent = RecordedEvent::first();
$this->assertEquals(MoneyAddedToWallet::class, $recordedEvent->class);
// json properties
$this->assertEquals(1234, $recordedEvent->properties->get('amount'));
$this->assertEquals($this->wallet->id, $recordedEvent->properties->get('wallet_id'));
$this->assertEquals($this->user->id, $recordedEvent->properties->get('user_id'));
$this->assertEquals('credit', $recordedEvent->properties->get('operation'));
$this->assertDatabaseHas('recorded_events', [
'name' => 'money_added_to_wallet',
'class' => 'Denismitr\EventRecorder\Tests\Stubs\Events\MoneyAddedToWallet',
'description' => "User with ID {$this->user->id} added 1234 to the wallet with ID {$this->wallet->id}"
]);