---
title: "Prílohy a vložené médiá — Comments for Laravel | Roundly"
description: "Pripájajte súbory do vlastnej skupiny komentára cez Media Library for Laravel a vkladajte ich do textu tokenmi [media:UUID]."
url: https://roundly-consulting.com/sk/open-source/navody/comments-for-laravel/prilohy-a-media
language: sk
---

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

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

# Prílohy a vložené médiá

Každý komentár vlastní jednu skupinu attachments cez Media Library for Laravel (Comment implementuje HasMedia). Obrázky dostanú responzívne varianty; ostatné súbory sa ukladajú ako originály a servírujú cez podpísaný streaming:

```php
$media = $comment->addMedia($request->file('file'))
    ->toBucket($comment->attachmentsBucket());

$comment->attachments();                // Collection<Media>
$comment->hasAttachments();             // bool
$comment->attachmentUrls();             // list<string>, each resolved by its visibility
$comment->attachmentUrls('responsive-320'); // that variant where generated, else the original
$comment->resolveAttachmentUrl($media); // public URL if public, signed short-lived URL if private
$comment->attachmentUrl($media);        // always a signed, short-lived URL

$comment->clearMediaBucket($comment->attachmentsBucket()); // remove every attachment
```

## Varianty obrázkov

Obrázkové prílohy dostanú jeden vygenerovaný variant pre každú responzívnu šírku s názvom responsive-<šírka> — podľa comments.media.responsive\_widths, inak podľa rebríka media.responsive.widths z Media Library (predvolene 320, 640, 960, 1280, 1920); generujú sa len šírky, ktoré obrázok dokáže vyplniť. Variant, ktorý príloha nemá — každý súbor, ktorý nie je obrázkom, alebo názov, ktorý skupina nikdy negeneruje — sa nahradí originálom, takže attachmentUrls($variant) nad zmiešanými prílohami nikdy nevyhodí výnimku.

## Súkromné a verejné prílohy

Prílohy sú predvolene súkromné (comments.media.visibility). Na súkromnú prílohu vedie vždy len podpísaný krátkodobý odkaz — na diskoch typu S3 natívne podpísaný, inak cez podpísanú streamovaciu routu Media Library. attachmentUrls(), vložené médiá v renderBody() aj CommentResource určujú URL každej prílohy podľa jej vlastnej viditeľnosti cez resolveAttachmentUrl(), takže súkromná príloha verejnú URL nikdy nedostane. Platnosť určuje comments.media.temporary\_url\_lifetime, inak platí predvolená hodnota Media Library.

Podpísané URL chránia odkaz, preto bajty nesmú byť dostupné inou cestou. Ak comments.media.disk nie je nastavený, súkromné prílohy aj ich varianty idú na comments.media.private\_disk — predvolene disk local v Laraveli (storage/app/private) — nikdy nie na verejný disk, ktorý sprístupňuje php artisan storage:link. COMMENTS\_MEDIA\_PRIVATE\_DISK môžete nasmerovať na iný neverejný disk; disk nastavený v COMMENTS\_MEDIA\_DISK sa použije pre všetky prílohy, preto ho pri súkromných prílohách nechajte neverejný:

```php
// config/comments.php — where attachment bytes live
'media' => [
    'visibility' => 'private',     // the default: every link is signed and short-lived
    'disk' => null,                // null = by visibility (private → private_disk, public → media default)
    'private_disk' => 'local',     // storage/app/private — never the public disk
    'temporary_url_lifetime' => 10, // minutes; null = the Media Library default
],
```

## Obmedzenia skupiny

Skupinu zúžite cez konfiguráciu — disk, allowlist mime typov, maximálnu veľkosť a rebrík responzívnych šírok:

```php
// config/comments.php
'media' => [
    'attachments_bucket' => 'attachments',
    'visibility' => 'public',
    'disk' => 's3',                       // used for every attachment when set
    'accepted_mime_types' => ['image/jpeg', 'image/png', 'application/pdf'],
    'max_file_size' => 2 * 1024 * 1024,   // bytes — enforced on upload
    'responsive_widths' => [320, 640, 960],
    'temporary_url_lifetime' => 10,       // minutes
    'inline' => [
        'enabled' => true,
        'default_variant' => '',
        'on_missing' => 'strip',
    ],
],
```

Nahrávané súbory sa kontrolujú voči skupine hneď pri vstupe: accepted\_mime\_types a max\_file\_size (v bajtoch) spôsobia, že Media Library súbor odmietne výnimkou FileUnacceptableForBucket.

## Vložené médiá

Prílohy vložíte do textu ako na GitHube či Reddite tokenmi \[media:UUID\] alebo \[media:UUID|variant\]. renderBody() ich hľadá len v skupine samotného komentára — nikdy v ľubovoľných globálnych médiách — jedným dávkovým dotazom a nikdy nevyhodí výnimku pri chýbajúcom UUID ani pri variante, ktorý obrázok nemá:

```php
$comment->update(['comment' => "see this [media:{$media->uuid}]"]);
$comment->update(['comment' => "a fixed width [media:{$media->uuid}|responsive-320]"]);

echo $comment->renderBody(); // HtmlString: responsive <img> for images, <a> for other files

// Safe with user input: escape the text when you write it — tokens survive e()
Comments::on($post)->as($user)->body(e($request->input('body')))->post();
```

- Obrázky sa vykreslia ako responzívny <img> so srcset; s variantom (v tokene alebo cez default\_variant) ako obyčajný <img> daného variantu — variant, ktorý obrázok nemá, sa vykreslí ako responzívny <img>.
- Ostatné súbory sa vykreslia ako odkaz <a> s názvom súboru.
- Nenájdené tokeny sa odstránia, alebo s on\_missing => 'keep' ponechajú; chybne zapísané tokeny zostanú nedotknuté.
- S inline.enabled => false vráti renderBody() pôvodné telo.

## Bezpečnosť: renderBody() text neescapuje

Escapujú sa len vygenerované značky <img> a <a>; všetko okolo tokenov sa vráti presne tak, ako je uložené. Keďže renderBody() vracia HtmlString, Blade ho vypíše surovo aj vnútri {{ }}. Pri obyčajnom texte vypíšte atribút comment a escapovanie nechajte na Blade. Pri texte s vloženými médiami escapujte text už pri zápise — tokeny neobsahujú špeciálne HTML znaky, takže e() prežijú — alebo výstup preveďte cez HTML sanitizér, ktorý povolí len vygenerované značky.

## 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/comments-for-laravel.md)
