---
title: "Fotografie k recenziám — Reviews for Laravel | Roundly"
description: "Galérie fotografií k recenziám z uploadov, draftov, diskov či URL a responzívne obrázky cez Media Library."
url: https://roundly-consulting.com/sk/open-source/navody/reviews-for-laravel/fotografie-k-recenziam
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Reviews for Laravel](https://roundly-consulting.com/sk/open-source/navody/reviews-for-laravel.md)

# Fotografie k recenziám

Pribalený model Review je vlastníkom médií v Media Library s jednou skupinou photos — responzívnou, zoradenou galériou. Fotografie pripojíte priamo v builderi:

```php
$review = Reviews::for($restaurant)
    ->by($user)
    ->rating(5)
    ->content('Great place')
    ->withPhoto($request->file('photo'))          // one UploadedFile
    ->withPhotos($request->file('photos'))        // an array of files
    ->withDraftPhoto($token)                       // a media-library draft token
    ->withPhotoFromDisk('incoming/a.jpg', 's3')    // a path on a disk
    ->withPhotoFromUrl('https://example.com/a.jpg')
    ->create();
```

Fotografie sa naviažu v transakcii vytvorenia ešte pred spustením ReviewCreated, takže listenery aj broadcasty ich už vidia. Ak niektorá fotografia zlyhá — alebo ich počet prekročí photos.max — recenzia nevznikne a súbory, ktoré predchádzajúce fotografie už zapísali (originály aj varianty), sa odstránia.

## Najprv upload, potom recenzia

Draft médiá z Media Library umožnia formuláru nahrať fotografie skôr, než recenzia existuje — upload vráti token a recenzia ho pri odoslaní naviaže:

```php
use RoundlyConsulting\MediaLibrary\Facades\MediaLibrary;

// 1. Upload step — the review does not exist yet. Hand the token back to the client.
$token = MediaLibrary::draft($request->file('photo'))->toBucket('photos')->draft_token;

// 2. Submit step — bind the draft while creating the review.
$review = Reviews::for($restaurant)
    ->by($user)
    ->rating(4)
    ->content('Cosy terrace, friendly staff')
    ->withDraftPhoto($token)
    ->create();
```

Neznámy alebo už naviazaný token vyhodí DraftMediaNotFound z Media Library; token po expirácii vyhodí DraftMediaExpired.

## Čítanie fotografií

```php
$review->photos();                          // Collection<Media> (ordered gallery)
$review->hasPhotos();                       // bool
$review->photoCount();                      // int
$review->firstPhotoUrl();                   // string ('' when empty)
$review->firstPhotoUrl('responsive-320');   // a responsive width variant
$review->photoUrls();                       // list<string>
$review->photoUrls('responsive-640');       // every photo at one width
$review->responsivePhotos(['alt' => 'Guest photo', 'class' => 'photo']); // list<string> of <img srcset="…">
$review->resolvePhotoUrl($media);           // one photo's URL
$review->photoSrcset($media);               // one photo's srcset
$review->firstPhotoTemporaryUrl();          // always a signed URL
$review->photosBucket();                    // 'photos' (reviews.photos.bucket)
```

Skupina vygeneruje jeden responzívny variant pre každú šírku z photos.responsive\_widths s názvom responsive-<šírka> (predvolene responsive-320, responsive-640, responsive-1024). Media Library nikdy nezväčšuje, šírka väčšia než originál sa preto nevygeneruje. Kým variant nie je vygenerovaný — alebo ak je fotografia užšia než daná šírka — čítacie metódy vrátia originál. Názov, ktorý skupina nedeklaruje (napr. 'thumb'), vyhodí InvalidVariant z Media Library.

## Pravidlá skupiny

- Viditeľnosť — predvolene verejná; galérie len cez podpísané URL nájdete v časti Súkromné fotografie.
- Povolené typy — photos.accepted\_mime\_types (predvolene JPEG, PNG, WebP a GIF).
- Veľkosť súboru — photos.max\_file\_size, predvolene 5 MB (0 = bez limitu na fotografiu).
- Počet — photos.max na recenziu, predvolene 5 (0 = bez limitu); prekročenie vyhodí InvalidReviewException::tooManyPhotos().

## Počty fotografií v súhrne

```php
$summary = $restaurant->ratingSummary();

$summary->photoCount;          // photos across approved reviews
$summary->reviewsWithPhotos;   // approved reviews carrying at least one photo

Reviews::for($restaurant)->photoCount();
Reviews::for($restaurant)->reviewsWithPhotos();
```

## Životný cyklus

- Predgenerovanie po schválení — keď sa recenzia stane schválenou, listener na ReviewApproved zaradí do fronty pre každú fotografiu jeden job na generovanie variantov, takže náhľady sú pripravené v momente zverejnenia. Platí to bez ohľadu na cestu — approve(), schválenie pri vytvorení (approved(), auto\_approve alebo moderátor) či opätovné moderovanie po úprave. Vypnete ho cez photos.warm\_on\_approval.
- Upratanie — trvalé zmazanie recenzie vyprázdni jej skupinu photos bez ohľadu na photos.enabled, takže fotografie uložené počas zapnutej funkcie svoju recenziu neprežijú. Mäkko zmazaná (a neskôr obnovená) recenzia si fotografie ponechá.

## Vypnutie fotografií

Po vypnutí funkcie sa skupina vôbec nedeklaruje, čítacie metódy vracajú prázdne hodnoty a každé volanie withPhoto\*() vyhodí InvalidReviewException::photosDisabled():

```bash
REVIEWS_PHOTOS_ENABLED=false
```

## 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](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## 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.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/reviews-for-laravel.md)
