Broadcasting
Broadcasting je predvolene vypnutý — bežné udalosti sa spúšťajú tak či tak. Zapnite ho, ak chcete zmeny posielať naživo cez broadcasting v Laraveli (Reverb, Pusher, Ably, …):
REALTIME_MESSAGES=truePo zapnutí používajú modely Thread, Participant a Message trait BroadcastsEvents z Laravelu pri vytvorení, úprave, zmazaní a obnovení. Nové vlákno sa ohlási až vtedy, keď sú v ňom jeho účastníci, takže súkromné vlákno sa dostane ku každému z nich. Mäkké zmazanie — zrušenie odoslania či odchod — spustí v Laraveli udalosti modelu trashed aj deleted, no vyšle sa len raz, ako trashed; trvalé zmazanie sa vyšle raz, ako deleted.
Vlákno vysiela len svoje vytvorenie: premenovanie, archivácia ani zmazanie sa nevysielajú. Ak ich chcete posielať, reagujte na udalosti ThreadRenamed a ThreadArchived — alebo zapnite systémové správy, ktoré do vlákna vložia (vysielanú) správu o premenovaní.
Kanály
| Kanál | Typ | Prenáša |
|---|---|---|
messaging | verejný | messaging.thread.created pre verejné vlákna. |
messaging.participant.{name}.{id} | súkromný | messaging.thread.created pre súkromné a priame vlákna — raz pre každého účastníka: {id} je jeho kľúč, {name} názov jeho triedy malými písmenami (napr. user) a {type} jeho celý morph typ (pozri nižšie). |
messaging.thread.{id} | súkromný | Udalosti účastníkov (joined, read, left), správ (sent, updated, unsent, restored) a písania. |
Balík neregistruje žiadne autorizačné callbacky kanálov — súkromné kanály autorizujte v routes/channels.php vašej aplikácie, napríklad overením, že používateľ je účastníkom vlákna (Thread::query()->forParticipant($user)).
Názvy kanálov a udalostí
Každý názov kanála aj udalosti je konfigurovateľný:
'broadcasting' => [
'enabled' => env('REALTIME_MESSAGES', false),
'threads' => [
'public-channel' => 'messaging',
'per-participant-channel' => 'messaging.participant.{name}.{id}', // {name}, {type} or {id}
'events' => [
'created' => 'messaging.thread.created',
],
],
'participants' => [
'channel' => 'messaging.thread.{id}',
'events' => [
'created' => 'messaging.participant.joined',
'updated' => 'messaging.participant.read',
'trashed' => 'messaging.participant.left',
'restored' => 'messaging.participant.joined',
'deleted' => 'messaging.participant.left',
],
],
'typing' => [
'event' => 'messaging.participant.typing',
],
'messages' => [
'channel' => 'messaging.thread.{id}',
'events' => [
'created' => 'messaging.message.sent',
'updated' => 'messaging.message.updated',
'trashed' => 'messaging.message.unsent',
'restored' => 'messaging.message.restored',
'deleted' => 'messaging.message.unsent',
],
],
],Zástupné symboly kanála účastníka
Kanál pre každého účastníka prijíma tri zástupné symboly: {id} je kľúč účastníka; {name} názov jeho triedy malými písmenami (App\Models\User → user); {type} jeho celý morph typ malými písmenami, s \ nahradeným bodkou (app.models.user, pri morph mape samotný alias). Bez morph mapy zdieľajú dva modely s rovnakým názvom triedy — App\Models\User a App\Models\Admin\User — jeden kanál {name} a každý dostáva ohlásenia thread.created toho druhého. Prejdite na {type} a tento kanál autorizujte v routes/channels.php, alebo zaregistrujte morph mapu:
// config/messages.php — 'broadcasting' => [ 'threads' => [ … ] ]
'per-participant-channel' => 'messaging.participant.{type}.{id}',
// App\Models\Admin\User #5 → private-messaging.participant.app.models.admin.user.5Payloady
- Thread — id, name, is_public, everyone_can_join.
- Participant — id, participant (participateAs()), read_at, joined_at, left_at.
- Message — id, sender (participateAs()), message (po zrušení odoslania null), sent_at, updated_at, deleted_at.
- Písanie — thread_id, participant (participateAs()).
Indikátor písania
Na kanál vlákna vyšlete živý indikátor písania — len sa vysiela (nikdy neukladá), rešpektuje broadcasting.enabled a každého, kto nie je aktuálnym účastníkom, odmietne výnimkou ParticipationException, či je broadcasting zapnutý, alebo nie:
use RoundlyConsulting\Messages\Facades\Messages;
Messages::thread($thread)->typing($user); // broadcasts ParticipantTyping — never persisted
$thread->typing($user); // the same, from the modelPrejavte 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.