API resources
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(),
);| Pole | Obsah |
|---|---|
id | ID komentára. |
body | Telo komentára. |
status | pending, approved alebo hidden. |
visible | Príznak viditeľnosti. |
parent_id | ID 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. |
replies | Vnorené 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 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.