Udalosti
RoundlyConsulting\Credits\Events\CreditsModified sa spustí po každej zaznamenanej zmene. Nesie entitu s kreditmi, nový záznam Credit a výsledný zostatok:
use Illuminate\Support\Facades\Event;
use RoundlyConsulting\Credits\Events\CreditsModified;
Event::listen(function (CreditsModified $event): void {
// $event->creditable, $event->credit, $event->balance
});Obsah udalosti
final class CreditsModified
{
use Dispatchable;
public function __construct(
public readonly Model&Creditable $creditable,
public readonly Credit $credit,
public readonly int $balance, // the bucket's balance this change produced
) {}
}balance je zostatok skupiny, ktorá sa zmenila — zistíte ju z $event->credit->bucket — nie súčet naprieč skupinami. Je to zostatok, ktorý táto zmena vytvorila, načítaný pod zámkom vlastníka v transakcii zmeny, takže doň nikdy nepresiakne súbežná zmena.
Kedy sa spúšťa
- Po každom úspešnom zápise — add(), deduct(), modify(), setTo() a ich podobách pre Money na scope, ako aj príslušných metódach traitu — a pre každú entitu, ktorú zmení credits:modify.
- Nie, keď je setCreditsTo() bez účinku, lebo zostatok už sedí.
- Nie, keď zmenu odmietne ochrana pred prečerpaním alebo kontrola meny — nič sa nezapísalo.
Listener
Pošlite potvrdenie, aktualizujte dashboard alebo upozornite na nízky zostatok:
use Illuminate\Support\Facades\Log;
Event::listen(function (CreditsModified $event): void {
Log::info("Balance for {$event->creditable->getKey()} is now {$event->balance}");
if ($event->credit->amount < 0 && $event->balance < 10) {
// $event->credit->bucket is running low — notify the owner
}
});Prejavte lásku k open source
Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.
Ďalšie spôsoby podpory vrátane kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
Chcete to zabudovať do svojho produktu?
Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.