Dávanie, odoberanie a prepínanie páčikov
Všetky tri operácie sú idempotentné a vracajú boolean s významom „páči sa teraz“ — like() vráti true, unlike() vráti false a toggle() vráti výsledný stav. Fasáda koná za prihláseného používateľa, pokiaľ neurčíte iného aktéra:
use RoundlyConsulting\Likes\Facades\Likes;
Likes::like($post); // true — ensure liked (no-op if already liked)
Likes::unlike($post); // false — ensure not liked (no-op if not liked)
Likes::toggle($post); // true on like, false on unlike
Likes::actor($user)->like($post); // as any actor instead of the signed-in userSkratka cez trait
GivesLikes ponúka tie isté operácie priamo na aktérovi — $user->like($post) je to isté ako Likes::actor($user)->like($post):
$post = Post::find(1);
$user = auth()->user();
$user->like($post); // true — ensure liked (no-op if already liked)
$user->unlike($post); // false — ensure not liked (no-op if not liked)
$user->toggleLike($post); // true on like, false on unlikeOpätovný páčik obnoví predtým odobratý záznam namiesto vytvorenia duplicitného riadku, takže každý aktér má jediný záznam na cieľový model a typ reakcie. Vynucuje to unikátny index tabuľky, takže to platí aj pri súbežných požiadavkách: dvojklik, druhá karta ani zopakovaná požiadavka nikdy nevytvoria druhý riadok a Liked / Unliked spustí len požiadavka, ktorá naozaj niečo zmenila. Idempotentné volania bez zmeny nič nezapíšu ani nespustia žiadne udalosti, takže dvojklik na tlačidlo nenafúkne počty ani notifikácie.
Typy reakcií
Typ reakcie zvolíte cez as() — alebo ho odovzdáte ako druhý argument operácie traitu. Bez neho sa použije default_reaction (pozri Typované reakcie):
Likes::as('love')->like($post);
Likes::actor($user)->as('love')->toggle($post);
$user->like($post, 'love'); // the trait takes the type as a second argument
$user->unlike($post, 'love');V controlleri
Keďže toggle() vracia nový stav, tlačidlo so srdiečkom vystačí s jedným volaním:
use Illuminate\Http\Request;
use RoundlyConsulting\Likes\Facades\Likes;
final class TogglePostLike
{
public function __invoke(Request $request, Post $post): array
{
$liked = Likes::actor($request->user())->toggle($post);
return ['liked' => $liked, 'count' => Likes::for($post)->count()];
}
}Hromadné operácie
Pridajte alebo odoberte páčiky mnohým modelom naraz — praktické pri importoch a funkcii „označiť všetko ako obľúbené“:
Likes::likeMany([$post, $comment]); // as the resolved actor
Likes::actor($team)->as('love')->unlikeMany([$post]);
$user->likeMany([$post, $comment, $photo]); // the trait shorthand
$user->unlikeMany([$post, $comment]);
$user->likeMany(Post::whereKey($ids)->get(), 'love'); // any iterable of models, optional typeHromadné volania nič nevracajú. Pre každú položku spustia rovnakú idempotentnú operáciu like alebo unlike, takže položky s existujúcim páčikom preskočia a každá zmenená položka spustí vlastné udalosti.
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.