Vytváranie recenzií
Reviews::for($subject) obmedzí volania na predmet a ->by($author) začne plynulý PendingReview; zreťazte nastavenia a ukončite volaním create():
use RoundlyConsulting\Reviews\Facades\Reviews;
$review = Reviews::for($restaurant) // the reviewable subject
->by($user) // the author
->rating(5)
->title('Loved it')
->content('Great place')
->meta(['visit' => 'dinner']) // array or Collection
->create();
// Rating-only (no text):
Reviews::for($restaurant)->by($user)->rating(4)->create();
// Text-only (no rating):
Reviews::for($restaurant)->by($user)->content('Friendly staff, slow kitchen')->create();
// Force-approve on create (bypasses moderation):
Reviews::for($restaurant)->by($user)->content('Trusted')->approved()->create();
// Mark a verified purchase / verified reviewer:
Reviews::for($restaurant)->by($user)->rating(5)->verified()->create();Alebo začnite od predmetu — addReview() ide cez ten istý manažér:
// Start from the subject — for($restaurant)->by($user) is filled in for you:
$restaurant->addReview($user)->rating(5)->content('Best ramen in town')->create();Prehľad buildera
| Metóda | Účel |
|---|---|
Reviews::for(Model $reviewable) | Hodnotený predmet — vráti ReviewableScope. |
->by(Model $author) | Autor — vráti PendingReview; predmet aj autor sú odteraz pevne dané. |
rating(?int $rating) | Hodnotenie v rozsahu min_rating…max_rating; null pre recenziu len s textom. |
title(?string $title) | Voliteľný nadpis. |
content(?string $content) | Voliteľný text. |
meta(array|Collection|null $meta) | Ľubovoľné metadáta, uložené ako JSON. |
approved() | Schváliť pri vytvorení a obísť moderátora. |
verified(bool $verified = true) | Označiť overený nákup / recenzenta. |
withPhoto() / withPhotos() | Pripojiť nahraté súbory (alebo lokálne cesty). |
withDraftPhoto(string $token) | Naviazať draft upload z media-library. |
withPhotoFromDisk($path, $disk) | Pripojiť súbor, ktorý už je na disku. |
withPhotoFromUrl(string $url) | Stiahnuť a pripojiť vzdialený obrázok. |
create() | Zvalidovať, moderovať, uložiť a vrátiť Review. |
Čo robí create()
- Odmietne prázdnu recenziu — recenzia potrebuje hodnotenie, text alebo oboje.
- Overí hodnotenie voči rozsahu min_rating…max_rating.
- Pri zapnutom one_per_author odmietne druhú nezmazanú recenziu od toho istého autora na ten istý predmet — odpovede vlastníka sa nepočítajú. Kontrola prebehne znova pod zámkom riadka autora, takže súbežné odoslania neprejdú obe.
- Nastaví stav: approved() alebo auto_approve recenziu hneď schváli a nastaví approved_at; inak rozhodne nakonfigurovaný moderátor — autor a predmet sú už priradené — a ako záloha platí default_status.
- Uloží recenziu a pripojí fotografie v jednej databázovej transakcii — neúspešný upload alebo prekročený limit vráti celé vytvorenie späť.
- Po transakcii spustí ReviewCreated, takže listenery už vidia uložené fotografie — a potom ReviewApproved alebo ReviewRejected, ak recenzia skončí schválená alebo zamietnutá.
Validácia a výnimky
Všetky výnimky balíka dedia od RoundlyConsulting\Reviews\Exceptions\ReviewException (RuntimeException), jeden catch teda pokryje všetky:
use RoundlyConsulting\Reviews\Exceptions\InvalidRatingException;
use RoundlyConsulting\Reviews\Exceptions\InvalidReviewException;
use RoundlyConsulting\Reviews\Exceptions\ReviewException;
try {
Reviews::for($restaurant)->by($user)->rating(7)->create();
} catch (InvalidRatingException $e) {
// "The rating 7 must be between 1 and 5."
} catch (InvalidReviewException $e) {
// empty review, duplicate author, too many photos, photos disabled
} catch (ReviewException $e) {
// the common base of every package exception
}| Výnimka | Vyhodí sa, keď |
|---|---|
InvalidReviewException::empty() | Recenzia nemá hodnotenie ani text. |
InvalidReviewException::duplicate() | Je zapnuté one_per_author a autor už predmet hodnotil. |
InvalidReviewException::tooManyPhotos() | Fotografie by prekročili photos.max. |
InvalidReviewException::photosDisabled() | Pripájate fotografiu, hoci photos.enabled je false. |
InvalidRatingException::outOfRange() | Hodnotenie je mimo min_rating…max_rating — pri vytvorení aj úprave. |
Správy o hodnotení, prázdnej recenzii, duplicite a zakázanom slove sú preložiteľné — publikujte reviews-translations a upravte lang/vendor/reviews:
| Kľúč | Predvolená správa |
|---|---|
reviews::messages.rating.out_of_range | The rating :given must be between :min and :max. |
reviews::messages.review.empty | A review must have either a rating or content. |
reviews::messages.review.duplicate | This author has already reviewed this subject. |
reviews::messages.review.banned_word | This review contains language that is not allowed. |
DTO a akcia
Predmet aj autor sú pevne dané, len čo by() vráti builder, takže ho nemožno presmerovať na iný predmet. create() odovzdá CreateReviewData metóde Reviews::create(), ktorá spustí akciu CreateReview — tá istá operácia jedným volaním:
use RoundlyConsulting\Reviews\DataTransferObjects\CreateReviewData;
use RoundlyConsulting\Reviews\Facades\Reviews;
// The builder's terminal step, in one call:
$review = Reviews::create(new CreateReviewData(author: $user, reviewable: $restaurant, rating: 5));Alebo spustite akciu sami (pozrite DI a akcie):
use RoundlyConsulting\Reviews\Actions\CreateReview;
use RoundlyConsulting\Reviews\DataTransferObjects\CreateReviewData;
$review = app(CreateReview::class)->execute(new CreateReviewData(
author: $user,
reviewable: $restaurant,
content: 'Great place',
title: 'Loved it',
rating: 5,
meta: collect(['visit' => 'dinner']),
approved: false,
verified: true,
));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.