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

JSON resource

ReviewResource (a ReviewCollection) poskytujú rozumný verejný tvar pre API a mobilných klientov:

use RoundlyConsulting\Reviews\Http\Resources\ReviewResource;

return ReviewResource::collection(
    $product->approvedReviews()->with(['author', 'reviewable', 'responses'])->get(),
);
PoleHodnota
id / parent_idKľúč recenzie; kľúč rodiča pri odpovediach vlastníka.
rating / status / verifiedHodnotenie (alebo null), stav ako reťazec, príznak overenia.
title / contentText recenzie.
helpful_count / unhelpful_count / helpful_scorePočty hlasov a ich rozdiel.
author / reviewableKaždé ako { id, type } — type je krátky názov triedy modelu (User), nikdy celý názov triedy; null, keď súvisiaci riadok už neexistuje.
responsesVnorené položky ReviewResource — len ak je vzťah načítaný.
photosZoznam { id, url, srcset }, pri súkromných fotografiách podpísaný.
created_at / updated_at / approved_atReťazce vo formáte ISO 8601.

meta sa zámerne nezverejňuje, interné poznámky a dôvody zamietnutia teda ostanú súkromné. URL fotografií sa riadia ich viditeľnosťou — pri súkromných sú podpísané, nikdy verejné.

Autor a predmet

author ani reviewable nikdy neobsahujú názov PHP triedy. Každé sa vykreslí cez vlastný resource, ktorý obalí súvisiaci model — ReviewAuthorResource a ReviewableResource, predvolene oba {id, type}. type je krátky názov triedy modelu (User, Product), s morph mapou aj bez nej — nikdy nie morph alias ani celý názov triedy (App\Models\User):

{
  "id": 12,
  "rating": 5,
  "author": { "id": 7, "type": "User" },
  "reviewable": { "id": 42, "type": "Product" },
  …
}

Ak súvisiaci riadok už neexistuje, vykreslí sa null; oba kľúče sú vždy prítomné. Ak vaše API potrebuje viac (meno, avatar, nadpis), nasmerujte reviews.resources.author alebo reviews.resources.reviewable na vlastný JsonResource. Dostane súvisiaci model:

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

// config/reviews.php
'resources' => [
    'author' => App\Http\Resources\ReviewerResource::class,
    'reviewable' => RoundlyConsulting\Reviews\Http\Resources\ReviewableResource::class,
],

Prázdna hodnota použije resource balíka; čokoľvek, čo nie je konkrétnou podtriedou JsonResource, vyhodí InvalidConfigurationException s názvom kľúča. ReviewResource::authorOf($review, $request) a ReviewResource::reviewableOf($review, $request) vrátia tie isté vykreslené odkazy ako obyčajné polia (alebo null).

Stránkované kolekcie

use RoundlyConsulting\Reviews\Http\Resources\ReviewCollection;

return new ReviewCollection(
    $product->approvedReviews()->latestFirst()->paginate(10),
);

ReviewCollection pred vykreslením načíta autorov a predmety svojich recenzií — aj už načítaných odpovedí vlastníka — jedným dopytom na každý morph typ; samotné odpovede nikdy nenačítava. Keď recenzie vykresľujete inak (new ReviewResource($review), ReviewResource::collection()), načítajte author a reviewable vopred ako v príklade vyššie, inak pribudne dopyt na každú recenziu.

Úpravy

Publikujte upraviteľné kópie — App\Http\Resources\Reviews\ReviewResource a ReviewCollection v app/Http/Resources/Reviews, triedy vo vašom namespace, ktoré vlastníte a ktoré na začiatku vykresľujú presne to isté ako resource balíka:

# Translations → lang/vendor/reviews
php artisan vendor:publish --tag="reviews-translations"

# JSON resources → app/Http/Resources/Reviews
php artisan vendor:publish --tag="reviews-resources"

Upravte ich a v controlleroch používajte ich namiesto tried balíka:

use App\Http\Resources\Reviews\ReviewResource;

return ReviewResource::collection(
    $product->approvedReviews()->with(['author', 'reviewable', 'responses'])->get(),
);

Publikovaný ReviewResource vykresľuje author a reviewable cez pomocné metódy balíka, takže náhrady cez reviews.resources.* platia aj pre vašu kópiu:

// app/Http/Resources/Reviews/ReviewResource.php
use RoundlyConsulting\Reviews\Http\Resources\ReviewResource as PackageReviewResource;

'author' => PackageReviewResource::authorOf($review, $request),
'reviewable' => PackageReviewResource::reviewableOf($review, $request),

Kópie publikované pred verziou 1.2.0 stále vykresľujú uložené author_type a reviewable_type — v aplikácii bez morph mapy celý názov triedy. Publikujte resources znova (--force prepíše vaše úpravy) alebo tieto dva kľúče vo svojej kópii nahraďte riadkami vyššie.

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.