Wat ga je maken?

Bij het aanmaken of bewerken van een artikel upload je een afbeelding. Die wordt opgeslagen en getoond op het overzicht en de detailpagina — precies zoals in het voorbeeldontwerp.

Waarom is dit nuttig?

Elke klant wil zelf plaatjes kunnen aanpassen. En uploads zijn een klassiek beveiligingslek, dus dit is een goede plek om te leren waar het mis kan gaan.

Stappenplan

  1. Zet enctype="multipart/form-data" op je formulier. Zonder dit komt je bestand niet aan. Test dat bewust een keer.
  2. Valideer streng: is het echt een afbeelding, hoe groot mag hij zijn, welke extensies sta je toe?
  3. Sla op met $request->file('image')->store('posts', 'public'). Bewaar alleen het pad in de database, niet het bestand zelf.
  4. Draai php artisan storage:link zodat de map publiek bereikbaar wordt. Zonder deze stap krijg je een 404 op je plaatje.
  5. Toon de afbeelding met asset('storage/' . $post->image).
  6. Zorg dat bewerken werkt zonder nieuwe upload: geen nieuw bestand betekent oude afbeelding behouden.
  7. Verwijder het oude bestand als er een nieuwe wordt geüpload. Anders vult je schijf zich met rommel.
  8. Toon een fallback-afbeelding als er geen plaatje is.

Kleine hulpmiddelen

$request->validate([
    'image' => ['nullable', 'image', 'mimes:jpg,jpeg,png,webp', 'max:2048'], // 2048 KB = 2 MB
]);

if ($request->hasFile('image')) {
    Storage::disk('public')->delete($post->image ?? '');
    $data['image'] = $request->file('image')->store('posts', 'public');
}
php artisan storage:link

Valkuilen