Broadcasting
Liked, Unliked a ReactionChanged sa dajú vysielať cez Laravel Echo. Broadcasting je predvolene vypnutý, takže existujúce inštalácie sa nezmenia. Zapnete ho v config/likes.php alebo v prostredí:
// config/likes.php
'broadcast' => [
'enabled' => env('LIKES_BROADCAST', true),
'channel_prefix' => 'likes',
'channel_type' => 'private', // private | public | presence
],LIKES_BROADCAST=truePo zapnutí sa každá udalosť vysiela na kanáli {channel_prefix}.{segment}.{id}, kde segment je celá morph trieda cieľového modelu so spätnými lomkami nahradenými bodkami, ako to robí broadcasting modelov v Laraveli — alebo jej alias z morph mapy bez zmeny. App\Models\Post s id 42 sa vysiela na likes.App.Models.Post.42, pri Relation::morphMap(['post' => Post::class]) na likes.post.42. Vaše listenery dostávajú udalosti bez ohľadu na toto nastavenie.
| Udalosť | Vysiela sa ako |
|---|---|
Liked | like.created |
Unliked | like.removed |
ReactionChanged | reaction.changed |
Autorizácia súkromných kanálov
Predvolený typ kanála je private, preto ho autorizujte v routes/channels.php:
// routes/channels.php
use Illuminate\Support\Facades\Broadcast;
Broadcast::channel('likes.App.Models.Post.{id}', function ($user, int $id): bool {
return $user->can('view', Post::findOrFail($id));
});Počúvanie cez Echo
Keďže udalosti majú vlastné názvy pre broadcasting, v Echo pred ne pridajte bodku:
Echo.private('likes.App.Models.Post.42')
.listen('.like.created', (e) => { /* e.like_id, e.actor_type, e.actor_id, e.likeable_type, e.likeable_id, e.type */ })
.listen('.like.removed', (e) => { /* ... */ })
.listen('.reaction.changed', (e) => { /* e.from, e.to */ });Doručenie a obsah správy
Udalosti implementujú ShouldBroadcast, takže vysielanie prechádza vašou frontou. Obsah nesie len identifikátory a reakciu — nikdy modely aktéra či cieľového objektu —, takže sa k odberateľovi kanála nedostane žiadny atribút vašich používateľov:
// like.created / like.removed
['like_id' => 7, 'actor_type' => 'User', 'actor_id' => 1,
'likeable_type' => 'Post', 'likeable_id' => 42, 'type' => 'love']
// reaction.changed — `from` / `to` instead of `type`
[..., 'from' => 'like', 'to' => 'love']actor_type a likeable_type obsahujú krátky názov triedy modelu (User, Post) — nikdy nie názov PHP triedy ani alias z morph mapy, či už morph mapu máte, alebo nie. Pred verziou 1.1.2 aplikácia bez morph mapy posielala každému odberateľovi App\Models\User — listenery, ktoré sa riadili starou hodnotou, upravte. Tieto polia správu len označujú: cieľový model naďalej určuje názov kanála, ktorý zostáva bez zmeny (likes.App.Models.Post.42). Rovnomenné modely v rôznych menných priestoroch (Blog\Post, Forum\Post) majú rovnaký krátky názov, takže listener, ktorý ich potrebuje rozlíšiť, sa riadi kanálom, ktorý odoberá.
Čokoľvek ďalšie si na klientovi načítajte podľa id.
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.