Gestion des fichiers et images
Upload, storage et affichage d'images
Concepts Théoriques
Chaque formation de SunuLearn a besoin d'une image de couverture. Laravel offre une abstraction simple pour uploader, stocker et servir des fichiers via la façade Storage.
Upload basique
public function store(Request $request)
{
$request->validate([
'image' => 'required|image|mimes:jpg,png,webp|max:2048', // Max 2 Mo
]);
$path = $request->file('image')->store('formations', 'public');
// Stocke dans storage/app/public/formations/
// Retourne : "formations/abc123.jpg"
}Le fichier est stocké dans storage/app/public/. Pour le rendre accessible depuis le navigateur, il faut un lien symbolique :
php artisan storage:link
# Crée : public/storage → storage/app/publicEnsuite dans Blade : <img src="{{ asset('storage/' . $formation->image_path) }}">.
Nommer le fichier proprement
$file = $request->file('image');
$filename = Str::slug($request->title) . '.' . $file->extension();
$path = $file->storeAs('formations', $filename, 'public');
// formations/laravel-12.jpgSupprimer l'ancien fichier
Quand on met à jour l'image, il faut supprimer l'ancienne :
use Illuminate\Support\Facades\Storage;
if ($formation->image_path) {
Storage::disk('public')->delete($formation->image_path);
}Formulaire avec enctype
<form action="..." method="POST" enctype="multipart/form-data">
@csrf
<input type="file" name="image" accept="image/*">
</form>Le enctype="multipart/form-data" est obligatoire pour les uploads.