{{-- resources/views/search/_hostel_card.blade.php --}} @php $minPrice = $hostel->prices->min('price_ttc'); $typeLabel = match($hostel->type ?? 'hostel') { 'camping' => 'π Camping', 'mixed' => 'πΏ Mixte', default => 'π¨ Hostel', }; /* * βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ * RΓ©solution intelligente du chemin de l'image de couverture. * βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ * HostelFlow stocke les images dans 2 emplacements possibles : * * 1) public/images/... * β assets statiques semΓ©s par DemoHostelImagesSeeder * β cover_image en BD : "images/Tabarka.jpg" * β URL finale : asset("images/Tabarka.jpg") * * 2) storage/app/public/uploads/... * β uploads dynamiques depuis le formulaire owner * β cover_image en BD : "uploads/abc123.jpg" * β URL finale : asset("storage/uploads/abc123.jpg") * (via le symlink créé par `php artisan storage:link`) * * DΓ©tection : si le chemin commence par "images/" β asset public, * sinon β storage symlink. * * Pattern PFE : "Storage Resolution Strategy" β la vue est agnostique * de la source des assets, ce qui permet de mixer seeds et uploads * sans dupliquer la logique d'affichage. */ $coverUrl = null; if ($hostel->cover_image) { $coverUrl = str_starts_with($hostel->cover_image, 'images/') ? asset($hostel->cover_image) : asset('storage/' . $hostel->cover_image); } @endphp