Fasáda Likes
RoundlyConsulting\Likes\Facades\Likes predvolene určí aktéra podľa prihláseného používateľa, takže bežné volanie zaberie jeden riadok. Aktéra alebo typ reakcie zmeníte fluentným builderom a jeden cieľový model čítate cez Likes::for():
use RoundlyConsulting\Likes\Facades\Likes;
Likes::like($post); // as the authenticated user
Likes::unlike($post);
Likes::toggle($post);
Likes::react($post); // one active reaction per actor + likeable
Likes::has($post); // bool
Likes::likeMany([$post, $comment]);
Likes::unlikeMany([$post, $comment]);
Likes::actor($user)->like($comment); // as any actor
Likes::actor($team)->toggle($post);
Likes::as('love')->like($post); // typed reaction
Likes::actor($user)->as('wow')->toggle($post);
Likes::actor($user)->as('love')->react($post); // switch reaction in place
Likes::actor($user)->has($post);
Likes::actor($user)->likeMany([$post, $comment]);
Likes::for($post)->count(); // int — all reactions (uses an eager-loaded likes_count)
Likes::for($post)->count('love'); // int — one reaction type
Likes::for($post)->summary($viewer); // ReactionSummary (viewer defaults to the resolved actor)
Likes::for($post)->likedBy($user); // bool — default reaction type unless givenMetódy
| Metóda | Vracia | Popis |
|---|---|---|
actor(Model $actor) | PendingLike | Začne reťazec pre konkrétneho aktéra. |
as(string $type) | PendingLike | Začne reťazec pre konkrétny typ reakcie. |
like(Model $likeable) | bool | Zabezpečí páčik; vráti true. |
unlike(Model $likeable) | bool | Zabezpečí, že páčik nie je; vráti false. |
toggle(Model $likeable) | bool | Prepne páčik; vráti nový stav. |
react(Model $likeable) | bool | Nastaví jedinú reakciu aktéra a zmení ju na mieste. |
has(Model $likeable) | bool | Či má aktér danú reakciu (predvolený typ, ak nepoužijete as()). |
likeMany(iterable $likeables) | void | Hromadné pridanie páčikov. |
unlikeMany(iterable $likeables) | void | Hromadné odobratie páčikov. |
for(Model $likeable) | LikeableLikes | Čítací handle pre jeden cieľový model — count(), summary(), likedBy(). |
fake() | LikesFake | Nahradí manažér zaznamenávajúcim testovacím fake. |
Čítací handle for()
Likes::for($likeable) vráti handle LikeableLikes: count(?type) bez typu použije prednačítaný likes_count, summary(?viewer) vráti ReactionSummary pre aktuálneho používateľa (predvolene vyhodnoteného aktéra) a likedBy($actor, ?type) overuje predvolený typ reakcie, ak iný neodovzdáte.
Traity modelov sú len skratka
HasLikes aj GivesLikes volajú ten istý manažér, takže všetko uvedené — vrátane Likes::fake() — platí aj pre ne:
$user->like($post); // = Likes::actor($user)->like($post)
$post->likesCount(); // = Likes::for($post)->count()
$post->reactionSummary(); // = Likes::for($post)->summary()Nemenný builder
actor() aj as() zakaždým vrátia nový PendingLike, takže rozpracovaný reťazec si môžete bezpečne uložiť a znova použiť:
$asLove = Likes::as('love'); // an immutable PendingLike — safe to keep
$asLove->like($post);
$asLove->actor($user)->toggle($photo); // a new builder; $asLove is unchanged
Likes::actor($user)->has($post); // checks the default reactionUrčenie aktéra
Bez explicitného aktéra sa fasáda obráti na actor_resolver: null použije auth()->user(); callable alebo invokovateľná trieda (získaná z kontajnera) musí vrátiť model alebo null; hodnota, z ktorej nevznikne callable, vyhodí InvalidConfigurationException. Nastavte ho pre iné guardy než web alebo pre aktérov, ktorí nie sú používatelia:
// config/likes.php
'actor_resolver' => fn () => auth('api')->user(),
// or an invokable class-string:
'actor_resolver' => \App\Likes\CurrentActorResolver::class,namespace App\Likes;
use Illuminate\Database\Eloquent\Model;
final class CurrentActorResolver
{
public function __invoke(): ?Model
{
return auth('api')->user();
}
}Laravel nedokáže uložiť do cache konfiguráciu s closures, preto pri php artisan config:cache uprednostnite invokovateľnú triedu.
Keď sa aktér nenájde
Likes::like($post); // a guest request with no resolvable actor
// RoundlyConsulting\Likes\Exceptions\NoAuthenticatedActorException:
// No actor could be resolved. Authenticate a user or pass an actor
// explicitly via Likes::actor($model).Čítania, ktoré sa musia vykresliť aj hosťom — withLikedState(), reactionSummary(), toLikeArray() a LikeResource — určia aktéra rovnako, no namiesto výnimky vrátia prázdny stav aktuálneho používateľa.
Globálny alias
facade_alias zaregistruje krátky globálny alias — predvolene Likes — takže fasáda funguje bez importu. Nastavením na null alebo false (LIKES_FACADE_ALIAS=false, prípadne 0/off/no) alias vynecháte; prázdna hodnota sa považuje za nenastavenú, takže sa Likes zaregistruje aj tak:
\Likes::toggle($post); // the global alias from facade_alias — no import neededPrejavte 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.