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

Balík funguje bez akejkoľvek konfigurácie. Publikovaný config/messages.php (blok broadcasting opisuje sekcia Broadcasting):

return [
    'models' => [
        'message' => RoundlyConsulting\Messages\Models\Message::class,
        'thread' => RoundlyConsulting\Messages\Models\Thread::class,
        'participant' => RoundlyConsulting\Messages\Models\Participant::class,
    ],

    'key_type' => env('MESSAGES_KEY_TYPE', 'bigint'),
    'primary_key_type' => env('MESSAGES_PRIMARY_KEY_TYPE', 'bigint'),

    'publicity' => [
        'public-by-default' => env('THREADS_PUBLIC', false),
        'everyone-can-join' => env('THREADS_EVERYONE_CAN_JOIN', false),
    ],

    'media' => [
        'attachments_bucket' => 'attachments',
        'disk' => env('MESSAGES_MEDIA_DISK', null),
        'private_disk' => env('MESSAGES_MEDIA_PRIVATE_DISK', 'local'),
        'visibility' => env('MESSAGES_MEDIA_VISIBILITY', 'private'),
        'accepted_mime_types' => [],
        'max_file_size' => null,
        'responsive_widths' => null,
        'warm_on_send' => true,
        'temporary_url_lifetime' => null,
        'cleanup_on_force_delete' => true,
    ],

    'system-messages' => [
        'enabled' => env('MESSAGES_SYSTEM_MESSAGES', false),
    ],

    'permissions' => [
        'enabled' => env('MESSAGES_PERMISSIONS', true),
    ],

    'notifications' => [
        'enabled' => env('MESSAGES_NOTIFICATIONS', false),
        'notification' => RoundlyConsulting\Messages\Notifications\NewMessageNotification::class,
        'channels' => ['database'],
    ],

    'preview' => [
        'length' => env('MESSAGES_PREVIEW_LENGTH', 120),
    ],

    'prune' => [
        'days' => env('MESSAGES_PRUNE_DAYS', 90),
    ],

    'broadcasting' => [
        'enabled' => env('REALTIME_MESSAGES', false),
        // channels + event names for threads, participants, typing and messages
    ],
];

Všetky kľúče

KľúčPredvolenéEnvÚčel
models.message / .thread / .participantmodely balíka—Vymeniteľné modely — nasmerujte ich na vlastnú podtriedu. Trieda, ktorá nie je modelom balíka ani jeho podtriedou, vyhodí InvalidConfigurationException.
primary_key_typebigintMESSAGES_PRIMARY_KEY_TYPETyp kľúča vlastných tabuliek balíka a interných cudzích kľúčov (bigint, uuid, ulid — čokoľvek iné vyhodí výnimku). Zafixuje sa pri prvej migrácii.
key_typebigintMESSAGES_KEY_TYPETyp kľúča vašich modelov odosielateľov a účastníkov — určuje typ morph stĺpcov sender_id / participant_id a musí zodpovedať ich primárnemu kľúču (bigint, uuid, ulid — čokoľvek iné vyhodí výnimku). Zafixuje sa pri prvej migrácii.
publicity.public-by-defaultfalseTHREADS_PUBLICNové skupinové vlákna sú verejné, ak volajúci neurčí inak.
publicity.everyone-can-joinfalseTHREADS_EVERYONE_CAN_JOINČi sa do nového skupinového vlákna môže ktokoľvek pridať sám.
media.attachments_bucketattachments—Skupina (bucket) media-library, do ktorej sa ukladajú prílohy. Prázdny názov sa považuje za nenastavený (platí predvolený); názov, ktorý nie je reťazcom, vyhodí výnimku.
media.disknullMESSAGES_MEDIA_DISKDisk pre všetky prílohy bez ohľadu na viditeľnosť; null = podľa viditeľnosti (súkromné → media.private_disk, verejné → predvolený disk media-library). Prázdna hodnota (MESSAGES_MEDIA_DISK=) sa považuje za nenastavenú, takže disk sa zvolí podľa viditeľnosti; názov, ktorý nie je reťazcom, vyhodí výnimku.
media.private_disklocalMESSAGES_MEDIA_PRIVATE_DISKNeverejný disk pre súkromné prílohy a ich varianty, keď je media.disk null — nikdy nie verejne servírovaný disk public. Prázdny názov sa považuje za nenastavený (local); názov, ktorý nie je reťazcom, vyhodí výnimku.
media.visibilityprivateMESSAGES_MEDIA_VISIBILITYprivate (len podpísané URL) alebo public; čokoľvek iné vyhodí výnimku.
media.accepted_mime_types[]—Povolené mime typy, zoznam neprázdnych reťazcov; [] prijme akýkoľvek súbor.
media.max_file_sizenull—Max. veľkosť prílohy v bajtoch, aspoň 1; null = predvolená hodnota media-library.
media.responsive_widthsnull—Rebrík šírok pre obrázkové prílohy, zoznam kladných celých čísel; null = predvolený rebrík media-library.
media.warm_on_sendtrue—Pri odoslaní zaradiť do fronty generovanie variantov každej obrázkovej prílohy.
media.temporary_url_lifetimenull—Platnosť podpísaných URL príloh v minútach, aspoň 1; null = predvolená hodnota media-library.
media.cleanup_on_force_deletetrue—Pri trvalom zmazaní a prune odstrániť súbory príloh; zrušené správy si ich ponechajú.
system-messages.enabledfalseMESSAGES_SYSTEM_MESSAGESPri pridaní, odchode a premenovaní zapisovať preložiteľné systémové správy.
permissions.enabledtrueMESSAGES_PERMISSIONSVynucovať roly vlastník/administrátor/člen v skupinových vláknach — roly sa zaznamenávajú v každom prípade.
notifications.enabledfalseMESSAGES_NOTIFICATIONSPri každom odoslaní notifikovať ostatných účastníkov vlákna.
notifications.notificationNewMessageNotification—Trieda notifikácie odoslaná príjemcom — podtrieda Notification, ktorá dostane správu v konštruktore; čokoľvek iné vyhodí výnimku.
notifications.channels['database']—Kanály, ktoré používa predvolená notifikácia (neprázdne reťazce).
preview.length120MESSAGES_PREVIEW_LENGTHMax. dĺžka náhľadov a úryvkov citácií, aspoň 1.
prune.days90MESSAGES_PRUNE_DAYSPredvolené obdobie uchovávania pre messages:prune a Messages::prune(), aspoň 1.
broadcasting.enabledfalseREALTIME_MESSAGESVysielať udalosti vlákien, účastníkov, správ a písania.
broadcasting.*pozri Broadcasting—Názvy kanálov a aliasy udalostí — každý reťazec; prázdna hodnota sa považuje za nenastavenú (platí názov z balíka), hodnota, ktorá nie je reťazcom, vyhodí výnimku.

Prostredie (env)

Prepínače, ktoré budete meniť najčastejšie, sú riadené cez env, takže konfiguráciu publikujete len zriedka:

MESSAGES_KEY_TYPE=bigint
MESSAGES_PRIMARY_KEY_TYPE=bigint
THREADS_PUBLIC=false
THREADS_EVERYONE_CAN_JOIN=false
MESSAGES_MEDIA_PRIVATE_DISK=local
MESSAGES_MEDIA_VISIBILITY=private
MESSAGES_SYSTEM_MESSAGES=true
MESSAGES_PERMISSIONS=true
MESSAGES_NOTIFICATIONS=true
MESSAGES_PREVIEW_LENGTH=120
MESSAGES_PRUNE_DAYS=90
REALTIME_MESSAGES=true

key_type a primary_key_type nastavte pred publikovaním a spustením migrácií — obe hodnoty sa čítajú počas migrácie.

Logické prepínače

Každý logický (bool) prepínač sa číta ako boolean, takže hodnoty v .env znamenajú presne to, čo hovoria — true, 1, on a yes ho zapnú; false, 0, off a no ho vypnú:

MESSAGES_PERMISSIONS=1    # true / 1 / on / yes — enforce roles
THREADS_PUBLIC=off        # false / 0 / off / no — keep new threads private

Prázdna hodnota (THREADS_PUBLIC=) sa považuje za nenastavenú, takže platí predvolená. Čokoľvek iné vyhodí RoundlyConsulting\PackageToolkit\Exceptions\InvalidConfigurationException namiesto toho, aby sa potichu prečítalo ako predvolená hodnota.

Striktné hodnoty

Rovnako striktne sa čítajú aj všetky ostatné nastavenia. Nastavenie bez hodnoty — kľúč chýba, je null alebo je prázdny ako riadok MESSAGES_PRUNE_DAYS= v hostiteľskej aplikácii — použije svoju predvolenú hodnotu; voliteľné nastavenie (media.disk, media.max_file_size, media.temporary_url_lifetime) zostane nenastavené. Celé čísla prijímajú int alebo čistý celočíselný reťazec (každá env hodnota je reťazec): MESSAGES_PRUNE_DAYS=ninety či 12.5 vyhodí výnimku namiesto toho, aby sa z nich stala 0 — čo by pri prune.days znamenalo zmazanie všetkých správ. Názov broadcast kanála či udalosti, bucketu alebo disku musí byť reťazec; media.visibility musí byť private alebo public; trieda notifikácie musí byť podtriedou Notification; model musí byť modelom balíka alebo jeho podtriedou.

Kontrola aktuálnej konfigurácie

php artisan about obsahuje sekciu Messages s nakonfigurovanými modelmi, typom kľúča, verejnosťou vlákien, vynucovaním rolí, systémovými správami, notifikáciami, broadcastingom, dĺžkou náhľadu, obdobím uchovávania a nastaveniami príloh. Zobrazuje len podobu konfigurácie — nikdy obsah správ ani účastníkov. Chybné nastavenie náhľadu, uchovávania, príloh či notifikácií sa zobrazí ako INVALID, príkaz nezlyhá.

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.