refactor: replace File facade with Storage facade for file handling and update image paths

This commit is contained in:
LailaWulandarii 2026-01-08 19:00:29 +07:00
parent a21939e362
commit 192af00f2f
5 changed files with 24 additions and 29 deletions

View File

@ -7,8 +7,7 @@
use App\Models\PaketFoto;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Storage;
class FotoController extends Controller
{
@ -61,9 +60,7 @@ public function store(Request $request)
if ($request->hasFile('foto')) {
$file = $request->file('foto');
$filename = time() . '_' . $file->getClientOriginalName();
// Simpan langsung ke folder public untuk asset()
$file->move(public_path('img/foto'), $filename);
$path = 'img/foto/' . $filename;
$path = $file->storeAs('img/foto', $filename, 'public');
}
PaketFoto::create([
@ -114,15 +111,14 @@ public function update(Request $request, string $id)
$data = $request->only(['nama', 'harga', 'durasi', 'deskripsi']);
if ($request->hasFile('foto')) {
// Hapus file lama jika ada foto baru yang diunggah
if ($paket->foto) {
File::delete(public_path($paket->foto));
Storage::disk('public')->delete($paket->foto);
}
$file = $request->file('foto');
$filename = time() . '_' . $file->getClientOriginalName();
$file->move(public_path('img/foto'), $filename);
$data['foto'] = 'img/foto/' . $filename;
$path = $file->storeAs('img/foto', $filename, 'public');
$data['foto'] = $path;
}
$paket->update($data);
@ -135,12 +131,9 @@ public function destroy(string $id)
// Cari data berdasarkan primary key id_paket
$paket = PaketFoto::where('id_paket', $id)->firstOrFail();
// 1. Cek dan hapus file foto dari folder public
if ($paket->foto) {
File::delete(public_path($paket->foto));
Storage::disk('public')->delete($paket->foto);
}
// 2. Hapus data dari database
$paket->delete();
return redirect()->back()->with('success', 'Paket foto dan filenya berhasil dihapus!');

View File

@ -75,7 +75,7 @@
<td style="width: 12%" class="text-center">Rp
{{ number_format($f->harga, 0, ',', '.') }}</td>
<td style="width:10%" class="text-center">
<img src="{{ asset($f->foto) }}" alt="Foto Produk" class="rounded"
<img src="{{ asset('storage/' . $f->foto) }}" alt="Foto Produk" class="rounded"
style="width: 50px; height: 50px; object-fit: cover;">
</td>
<td class="col-auto text-center">

View File

@ -15,9 +15,9 @@
<div class="mb-2">
<label class="form-label">Nama Paket</label>
<input type="text" class="form-control @error('nama') is-invalid @enderror"
style="font-size: 14px;" placeholder="Masukkan Nama Paket"
value="{{ old('nama') }}">
<input type="text" name="nama"
class="form-control @error('nama') is-invalid @enderror" style="font-size: 14px;"
placeholder="Masukkan Nama Paket" value="{{ old('nama') }}">
@error('nama')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
@ -27,12 +27,13 @@
<div class="col-12 col-md-6">
<div class="mb-2">
<label class="form-label">Harga Paket</label>
<input type="number" class="form-control @error('nama') is-invalid @enderror"
<input type="number" name="harga"
class="form-control @error('harga') is-invalid @enderror"
style="font-size: 14px;"
placeholder="Harga Paket"value="{{ old('nama') }}">
placeholder="Harga Paket"value="{{ old('harga') }}">
<p class="mb-0"><small class="text-muted mb-0">Dalam Rupiah</small>
</p>
@error('nama')
@error('harga')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
@ -42,12 +43,13 @@
<div class="col-12 col-md-6">
<div class="mb-2">
<label class="form-label">Durasi</label>
<input type="number" class="form-control @error('nama') is-invalid @enderror"
<input type="number" name="durasi"
class="form-control @error('durasi') is-invalid @enderror"
style="font-size: 14px;"
placeholder="Durasi Paket"value="{{ old('nama') }}">
placeholder="Durasi Paket"value="{{ old('durasi') }}">
<p class="mb-0"><small class="text-muted mb-0">Dalam Menit</small>
</p>
@error('nama')
@error('durasi')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
@ -57,8 +59,8 @@
<div class="mb-2">
<label class="form-label">Deskripsi Paket</label>
<textarea class="form-control @error('nama') is-invalid @enderror" rows="5" style="font-size: 14px;"
placeholder="Masukkan Deskripsi Paket">{{ old('deskripsi') }}</textarea>
<textarea name="deskripsi" class="form-control @error('deskripsi') is-invalid @enderror" rows="5"
style="font-size: 14px;" placeholder="Masukkan Deskripsi Paket">{{ old('deskripsi') }}</textarea>
@error('deskripsi')
<div class="invalid-feedback">{{ $message }}</div>
@enderror

View File

@ -100,8 +100,8 @@ class="text-center text-muted d-none">
sini</p>
</div>
<img id="editImgPreview{{ $f->id_paket }}" src="{{ asset($f->foto) }}"
class="img-fluid w-100 h-100"
<img id="editImgPreview{{ $f->id_paket }}"
src="{{ asset('storage/' . $f->foto) }}" class="img-fluid w-100 h-100"
style="object-fit: cover; position: absolute; top: 0; left: 0;">
</div>
</div>

View File

@ -12,8 +12,8 @@
<div class="col-12 col-sm-4">
@if ($f->foto)
{{-- Langsung img tanpa wrapper --}}
<img src="{{ asset($f->foto) }}" class="custom-img-box-foto"
onclick="showImage('{{ asset($f->foto) }}')">
<img src="{{ asset('storage/' . $f->foto) }}" class="custom-img-box-foto"
onclick="showImage('{{ asset('storage/' . $f->foto) }}')">
@else
{{-- Div pengganti kalau tidak ada foto --}}
<div