Nahrávanie súborov
Keď pole nastavíte na typ file alebo image, MediaFileResolver pripojí nahratý súbor ako médium k riadku odpovede — obrázky dostanú varianty, ostatné súbory prejdú bez zmeny a späť sa servírujú cez podpísané či dočasné URL (predvolene súkromne). Definujte pole:
Forms::define('kyc', 'Identity check')
->public()
->group('documents', 'Documents', function (GroupBuilder $g): void {
$g->field('passport', 'Passport')->file()->rules(['required', 'file', 'max:10240']);
})
->create();Vstup pre súbor používa rovnakú vnorenú cestu ako každé iné pole — nezabudnite na multipart kódovanie:
<form method="POST" action="{{ route('kyc.store') }}" enctype="multipart/form-data">
@csrf
<input type="file" name="kyc[documents][passport]">
<button type="submit">Upload</button>
</form>Čítanie príloh
$g->field('passport', 'Passport')->file();
// the submission row is the media owner:
$row = Forms::find('kyc')->fields->firstWhere('key', 'passport')->submissions->first();
$row->attachments(); // Collection<Media>
$row->attachmentUrl(); // first attachment's URL: signed if private, public if public
$row->attachmentTemporaryUrl(); // always a short-lived signed URL
// or through the resolver:
$resolver = Forms::find('kyc')->fields->firstWhere('key', 'passport')->resolver();
$resolver->fromStorage(); // the stored media UUID
$resolver->url(); // same as attachmentUrl()Riadok ukladá ako hodnotu UUID média, takže fromStorage() aj čítač odpovedí vracajú toto UUID. Ďalšie pomocné metódy na riadku a resolveri:
$row->hasAttachments(); // bool
$row->attachmentUrls(); // list<string> — every attachment
$row->attachmentBucket(); // 'attachment' (config forms.media.bucket)
$resolver->temporaryUrl(); // short-lived signed URL via the resolver
$resolver->url($user); // scope the lookup to one senderNastavenia nahrávania
Všetko nájdete v forms.media — skupinu médií, viditeľnosť, disk, povolené mime typy, limit veľkosti, responzívne šírky a platnosť podpísanej URL:
// config/forms.php
'media' => [
'bucket' => 'attachment',
'visibility' => 'private', // or 'public'
'disk' => env('FORMS_MEDIA_DISK'), // null = by visibility (see private_disk)
'private_disk' => env('FORMS_MEDIA_PRIVATE_DISK', 'local'), // private uploads, never web-served
'accepted_mime_types' => ['application/pdf', 'image/jpeg', 'image/png'],
'max_file_size' => 10 * 1024 * 1024, // bytes
'responsive_widths' => [480, 960], // null = the media default ladder
'temporary_url_lifetime' => 10, // minutes; null = the media default
],Trvalé zmazanie (forceDelete) riadku odpovede odstráni aj jeho prílohy, takže po tvrdom mazaní nezostanú osirotené súbory. Mäkké mazanie súbory ponechá.
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.