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

Hotový JSON výstup pre SPA a mobilné backendy:

use RoundlyConsulting\Comments\Http\Resources\CommentResource;

return CommentResource::collection(
    $post->threadedComments()->with(['actor', 'likes', 'media'])->get(),
);
PoleObsah
idID komentára.
bodyTelo komentára.
statuspending, approved alebo hidden.
visiblePríznak viditeľnosti.
parent_idID rodičovského komentára alebo null.
lockedČi má komentár nastavený vlastný zámok vlákna.
author{ id, type } autora cez comments.resources.author — type je krátky názov triedy (User); null, ak bol autor zmazaný — len pri načítanom vzťahu actor.
likes{ count, viewer_state, breakdown } — len pri načítanom vzťahu likes.
attachments[{ id, url }] (UUID média + URL, pri súkromných prílohách podpísaná) — len pri načítanom vzťahu media.
repliesVnorené položky CommentResource — len pri načítaných replies.
created_at / updated_atČasové značky v ISO 8601.

threadedComments() je verejné vlákno, takže JSON obsahuje len viditeľné a schválené komentáre najvyššej úrovne a odpovede. Resource vykreslí čokoľvek, čo dostane — kľúč replies je akýkoľvek načítaný vzťah replies — preto mu na verejných endpointoch odovzdávajte verejné query: threadedComments() alebo CommentQuery s visible() a withReplies().

Payload likes sa vykresľuje bez diváka, takže viewer_state je stav hosťa — údaje pre konkrétneho diváka získate cez withLikedState($viewer) v query alebo likeState($viewer). URL príloh sa určujú podľa viditeľnosti každej prílohy — pri súkromných sú podpísané a krátkodobé.

Resource nevracia meta, pretože metaúdaje často obsahujú interné príznaky. CommentResource je final — ak chcete meta zobraziť, vykresľujte komentáre cez vlastný resource.

Komentár s načítanými vzťahmi actor a replies sa vykreslí takto:

{
  "id": 7,
  "body": "Great post!",
  "status": "approved",
  "visible": true,
  "parent_id": null,
  "locked": false,
  "author": { "id": 42, "type": "User" },
  "replies": [],
  "created_at": "2026-10-18T09:30:00+00:00",
  "updated_at": "2026-10-18T09:30:00+00:00"
}

author sa vykreslí cez CommentAuthorResource: kľúč a krátky názov triedy, nikdy nie uložený actor_type — bez morph mapy je to celý názov triedy (App\Models\User) a žiadny názov PHP triedy sa ku klientovi API nedostane. type je krátky názov triedy s morph mapou aj bez nej; alias ako member sa nevykreslí ani vtedy.

Vlastný tvar autora

Nastavte comments.resources.author na vlastného potomka JsonResource. Dostane model autora (actor) pri komentároch najvyššej úrovne aj pri vnorených odpovediach — pre autorov odpovedí načítajte replies.actor:

// config/comments.php
'resources' => [
    'author' => App\Http\Resources\AuthorResource::class,
],

// app/Http/Resources/AuthorResource.php
final class AuthorResource extends JsonResource
{
    public function toArray(Request $request): array
    {
        return [
            'id' => $this->resource->getKey(),
            'name' => $this->resource->name,
            'avatar_url' => $this->resource->avatar_url,
        ];
    }
}

Ak komentáre píše viac typov modelov, rozlíšte ich vo vlastnom resource. Prázdna hodnota alebo null znamená pribalený CommentAuthorResource; čokoľvek, čo nie je inštanciovateľný potomok JsonResource, vyhodí InvalidConfigurationException s názvom kľúča.

Kolekcie a stránkovanie

CommentCollection zbiera CommentResource a funguje aj so stránkovaným výsledkom:

use RoundlyConsulting\Comments\Facades\Comments;
use RoundlyConsulting\Comments\Http\Resources\CommentCollection;

return new CommentCollection(
    Comments::for($post)->visible()->rootsOnly()->withReplies()->paginate(20),
);

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.