Konfigurácia
Balík funguje bez akejkoľvek konfigurácie — každý kľúč má rozumnú predvolenú hodnotu. Publikovaný config/comments.php bez docblockov:
use RoundlyConsulting\Comments\Http\Resources\CommentAuthorResource;
use RoundlyConsulting\Comments\Http\Resources\CommentEditorResource;
use RoundlyConsulting\Comments\Models\Comment;
return [
'model' => Comment::class,
'key_type' => env('COMMENTS_KEY_TYPE', 'bigint'),
'require_approval' => env('COMMENTS_REQUIRE_APPROVAL', false),
'max_length' => env('COMMENTS_MAX_LENGTH', 5000),
'max_depth' => env('COMMENTS_MAX_DEPTH', 5),
'order' => env('COMMENTS_ORDER', 'latest'),
'blocklist' => [],
'blocklist_action' => env('COMMENTS_BLOCKLIST_ACTION', 'reject'),
'mention_resolver' => null,
'edit_history' => env('COMMENTS_EDIT_HISTORY', false),
'deleted_comments' => env('COMMENTS_DELETED_COMMENTS', 'remove'), // 'remove' | 'placeholder'
'authorization' => env('COMMENTS_AUTHORIZATION', false),
// The JSON resources CommentResource renders author and editors through — see API resources.
'resources' => [
'author' => CommentAuthorResource::class,
'editor' => CommentEditorResource::class,
],
// Auto-hide a comment on an upheld report / threshold crossing (reports-for-laravel).
'moderation' => [
'on_resolved' => 'hide', // 'hide' | null — anything else throws
'auto_hide' => true, // react to the global reports threshold
],
// Attachments + inline [media:UUID] rendering (media-library-for-laravel).
'media' => [
'attachments_bucket' => 'attachments',
'visibility' => env('COMMENTS_MEDIA_VISIBILITY', 'private'),
'disk' => env('COMMENTS_MEDIA_DISK'),
'private_disk' => env('COMMENTS_MEDIA_PRIVATE_DISK', 'local'),
'accepted_mime_types' => [],
'max_file_size' => null,
'responsive_widths' => null,
'temporary_url_lifetime' => null,
'inline' => [
'enabled' => true,
'default_variant' => '',
'on_missing' => 'strip', // 'strip' | 'keep' (anything else throws)
],
],
];Všetky kľúče
| Kľúč | Predvolené | Účel |
|---|---|---|
model | Comment::class | Eloquent model, v ktorom sa ukladajú komentáre. Nastavte ho na vlastného potomka pribaleného Comment; iná trieda vyhodí výnimku. |
key_type | bigint | Typ kľúča polymorfných stĺpcov: bigint, uuid alebo ulid — čokoľvek iné vyhodí výnimku. Načíta sa pri spustení migrácie; kľúče sa ukladajú a čítajú bez zmeny. |
require_approval | false | Nové komentáre začínajú ako pending a pred zobrazením ich treba schváliť. |
max_length | 5000 | Max počet znakov tela, najmenej 1; dlhšie vyhodí InvalidCommentBodyException. |
max_depth | 5 | Max vnorenie odpovedí, najmenej 1 (komentár najvyššej úrovne má hĺbku 1; mäkko zmazaní predkovia sa započítavajú); obmedzuje aj eager loading vlákien. |
order | latest | Poradie approvedComments: latest (najnovšie prvé) alebo oldest; čokoľvek iné vyhodí výnimku. |
blocklist | [] | Zakázané slová (celé slová, bez ohľadu na veľkosť písmen) alebo regulárne výrazy s oddeľovačmi, napr. /badword/i. Prázdna položka alebo položka, ktorá nie je reťazec, vyhodí výnimku. |
blocklist_action | reject | Pri zhode, pri zápise aj úprave: reject (vyhodí CommentRejectedException), pending alebo hidden; čokoľvek iné vyhodí výnimku. |
mention_resolver | null | Invokovateľná trieda (class-string) alebo dvojica [Class::class, 'method'] vytvorená cez kontajner, ktorá priradí @handle k modelu — nikdy nie closure (config:cache ju neuloží). null = handles sa len uložia; hodnota, z ktorej nevznikne volateľný resolver — neznáma trieda, chýbajúca metóda —, vyhodí výnimku. |
edit_history | false | Pri každej úprave uloží nahradené telo ako číslovanú revíziu s autorom úpravy a časom — pozrite História úprav. Vypnuté: úprava telo prepíše. Vyžaduje migráciu create_comment_revisions_table. |
deleted_comments | remove | Čo urobí mäkko zmazaný komentár s verejným vláknom: remove (vypadne aj s odpoveďami) alebo placeholder (ponechá si miesto aj odpovede a vykreslí sa bez obsahu); čokoľvek iné vyhodí výnimku. |
authorization | false | Pred každou zmenou — create, update, delete, restore, moderate, lock a unlock — sa pýta policy pre Comment. |
resources.author | CommentAuthorResource::class | JSON resource, cez ktorý CommentResource vykreslí author; dostane model autora (actor). Nastavte ho na vlastný JsonResource, ak chcete pridať meno či avatar — prázdna hodnota alebo null = predvolený; čokoľvek, čo nie je inštanciovateľný potomok JsonResource, vyhodí výnimku. |
resources.editor | CommentEditorResource::class | JSON resource, cez ktorý každý záznam histórie vykreslí autora úpravy; dostane model autora úpravy. Platia rovnaké pravidlá ako pri resources.author. |
moderation.on_resolved | hide | Skryje komentár po potvrdení nahlásenia; null (alebo prázdna hodnota) vypne; čokoľvek iné vyhodí výnimku. |
moderation.auto_hide | true | Skryje komentár po prekročení globálneho reports.threshold. |
media.attachments_bucket | attachments | Názov skupiny, ktorú komentár registruje v Media Library. |
media.visibility | private | private (podpísané URL) alebo public; čokoľvek iné vyhodí výnimku — preklep nikdy nevyberie viditeľnosť za vás. |
media.disk | null | Disk pre všetky prílohy; null alebo prázdna hodnota = podľa viditeľnosti (súkromné → media.private_disk, verejné → predvolený disk Media Library). |
media.private_disk | local | Disk pre súkromné prílohy a ich varianty, keď media.disk nie je nastavený — musí byť neverejný (COMMENTS_MEDIA_PRIVATE_DISK). |
media.accepted_mime_types | [] | Allowlist mime typov; [] prijme akýkoľvek typ. |
media.max_file_size | null | Max veľkosť prílohy v bajtoch, najmenej 1, vynucovaná pri nahratí (FileUnacceptableForBucket); null = media.max_file_size z Media Library. |
media.responsive_widths | null | Rebrík šírok pre obrázkové prílohy — zoznam kladných celých čísel (varianty s názvom responsive-<šírka>); null = media.responsive.widths z Media Library. |
media.temporary_url_lifetime | null | Platnosť podpísanej URL prílohy v minútach, najmenej 1; null = predvolená hodnota Media Library. |
media.inline.enabled | true | Rozbalí tokeny [media:UUID] v renderBody(). |
media.inline.default_variant | '' (prázdne) | Variant pre token bez variantu — reťazec; prázdne = responzívny <img>. |
media.inline.on_missing | strip | strip alebo keep pre tokeny, ktoré sa nenašli; čokoľvek iné vyhodí výnimku. |
Prostredie (env)
Bežné prepínače sa riadia cez env, takže súbor väčšinou publikovať nemusíte:
COMMENTS_KEY_TYPE=bigint
COMMENTS_REQUIRE_APPROVAL=true
COMMENTS_MAX_LENGTH=2000
COMMENTS_MAX_DEPTH=3
COMMENTS_ORDER=oldest
COMMENTS_BLOCKLIST_ACTION=pending
COMMENTS_EDIT_HISTORY=true
COMMENTS_DELETED_COMMENTS=placeholder
COMMENTS_AUTHORIZATION=true
COMMENTS_MEDIA_VISIBILITY=private
COMMENTS_MEDIA_PRIVATE_DISK=s3-privateKaždý prepínač typu bool sa načí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ú. COMMENTS_REQUIRE_APPROVAL=1 nové komentáre podrží na kontrolu, COMMENTS_AUTHORIZATION=off policy preskočí. Prázdna hodnota (COMMENTS_AUTHORIZATION=) sa považuje za nenastavenú, takže platí predvolená. Čokoľvek iné vyhodí InvalidConfigurationException, namiesto toho, aby sa potichu použila predvolená hodnota.
Striktné nastavenia
Rovnako striktné sú aj všetky ostatné nastavenia a každá chyba vyhodí RoundlyConsulting\PackageToolkit\Exceptions\InvalidConfigurationException s názvom kľúča. Nastavenie bez hodnoty — kľúč chýba, je null alebo je prázdny ako riadok COMMENTS_MAX_LENGTH= v hostiteľskej aplikácii —, použije svoju predvolenú hodnotu; voliteľné nastavenie (media.disk, media.max_file_size, media.responsive_widths, media.temporary_url_lifetime) zostane nenastavené:
- Celé čísla prijímajú int alebo reťazec s celým číslom — každá hodnota z env je reťazec —, takže COMMENTS_MAX_LENGTH=five či 5.5 vyhodí výnimku, namiesto toho, aby sa z nej stala 0. Dĺžky, hĺbky, veľkosti, šírky a doby platnosti musia byť najmenej 1.
- Preklep v order, blocklist_action, moderation.on_resolved, media.visibility alebo media.inline.on_missing vyhodí výnimku, namiesto toho, aby sa zvolila jedna z možností — preklep v media.visibility sa už nečíta ako private a preklep v on_resolved už nevypne automatické skrývanie.
- Názov skupiny či disku, ktorý nie je reťazec, vyhodí výnimku, rovnako ako chybný zoznam (blocklist, accepted_mime_types, responsive_widths).
- Preklep v deleted_comments vyhodí výnimku, namiesto toho, aby sa potichu použilo remove.
- resources.author alebo resources.editor, ktorý nie je inštanciovateľný potomok JsonResource — stdClass, neexistujúca trieda, samotná báza JsonResource, abstraktný resource —, vyhodí výnimku pri prvom vykreslení autora či autora úpravy.
php artisan about chybné nastavenie zobrazí ako INVALID, namiesto toho, aby zlyhal.
Typ kľúča
key_type určuje typ kľúča polymorfných stĺpcov actor, commentable, mentionable a lockable: bigint (predvolene), uuid alebo ulid — prázdna hodnota (COMMENTS_KEY_TYPE=) sa považuje za nenastavenú a ponechá bigint, iná hodnota vyhodí InvalidConfigurationException. Načíta sa pri spustení migrácie, preto ho nastavte ešte pred migrovaním.
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.