NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky

Idempotentné volania bez zmeny — páčik tam, kde už je, alebo odobratie tam, kde nie je — nespustia žiadnu udalosť. Pri skutočnej zmene balík spustí práve jednu udalosť:

use RoundlyConsulting\Likes\Events\Liked;

class NotifyAuthor
{
    public function handle(Liked $event): void
    {
        // $event->actor, $event->likeable, $event->type, $event->like
    }
}
UdalosťKedyVlastnosti
LikedPáčik vznikne alebo sa obnovíactor, likeable, type, like
UnlikedPáčik sa odoberieactor, likeable, type, like
ReactionChangedReakcia sa zmení cez react()actor, likeable, from, to, like
  • Zmena cez react() spustí len ReactionChanged — nikdy Liked ani Unliked. Keď react() zlúči viac reakcií do jednej, spustí navyše Unliked pre každú reakciu, ktorú odoberie.
  • Súbežné požiadavky udalosť nezdvoja: spustí ju len požiadavka, ktorá záznam naozaj zmenila.
  • Hromadné likeMany() / unlikeMany() spustia jednu udalosť pre každú položku, ktorá sa skutočne zmenila.

Registrácia listenerov

use Illuminate\Support\Facades\Event;
use RoundlyConsulting\Likes\Events\Liked;
use RoundlyConsulting\Likes\Events\ReactionChanged;

// e.g. in AppServiceProvider::boot()
Event::listen(Liked::class, NotifyAuthor::class);

Event::listen(function (ReactionChanged $event): void {
    // $event->from, $event->to — a clean transition, never an unlike + like
});

Udalosti používajú SerializesModels, takže listenery vo fronte fungujú ako zvyčajne.

Voliteľne: uložený stĺpec s počtom

Balík nikdy nepridáva stĺpce do vašich tabuliek. Pre počty v O(1) použite withLikesCount() / loadCount('likes'), alebo si udržiavajte vlastný stĺpec s počtom cez malý listener — napríklad stĺpec likes_count na cieľovom modeli:

use RoundlyConsulting\Likes\Events\Liked;
use RoundlyConsulting\Likes\Events\Unliked;

class SyncLikesCounter
{
    public function increment(Liked $event): void
    {
        $event->likeable->increment('likes_count');
    }

    public function decrement(Unliked $event): void
    {
        $event->likeable->decrement('likes_count');
    }
}
Event::listen(Liked::class, [SyncLikesCounter::class, 'increment']);
Event::listen(Unliked::class, [SyncLikesCounter::class, 'decrement']);

Zaregistrujte ho sami — balík ho automaticky neregistruje. Zmena reakcie nespustí Liked ani Unliked a react(), ktorý zlúči viac reakcií, spustí Unliked pre každú odobratú, takže počet zostane správny.

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 kryptomien

Odoslaní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.