refactor: replace File facade with Storage facade for file handling and update image paths
This commit is contained in:
parent
a21939e362
commit
192af00f2f
|
|
@ -7,8 +7,7 @@
|
||||||
use App\Models\PaketFoto;
|
use App\Models\PaketFoto;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\Validator;
|
use Illuminate\Support\Facades\Validator;
|
||||||
use Illuminate\Support\Facades\File;
|
use Illuminate\Support\Facades\Storage;
|
||||||
|
|
||||||
|
|
||||||
class FotoController extends Controller
|
class FotoController extends Controller
|
||||||
{
|
{
|
||||||
|
|
@ -61,9 +60,7 @@ public function store(Request $request)
|
||||||
if ($request->hasFile('foto')) {
|
if ($request->hasFile('foto')) {
|
||||||
$file = $request->file('foto');
|
$file = $request->file('foto');
|
||||||
$filename = time() . '_' . $file->getClientOriginalName();
|
$filename = time() . '_' . $file->getClientOriginalName();
|
||||||
// Simpan langsung ke folder public untuk asset()
|
$path = $file->storeAs('img/foto', $filename, 'public');
|
||||||
$file->move(public_path('img/foto'), $filename);
|
|
||||||
$path = 'img/foto/' . $filename;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
PaketFoto::create([
|
PaketFoto::create([
|
||||||
|
|
@ -114,15 +111,14 @@ public function update(Request $request, string $id)
|
||||||
$data = $request->only(['nama', 'harga', 'durasi', 'deskripsi']);
|
$data = $request->only(['nama', 'harga', 'durasi', 'deskripsi']);
|
||||||
|
|
||||||
if ($request->hasFile('foto')) {
|
if ($request->hasFile('foto')) {
|
||||||
// Hapus file lama jika ada foto baru yang diunggah
|
|
||||||
if ($paket->foto) {
|
if ($paket->foto) {
|
||||||
File::delete(public_path($paket->foto));
|
Storage::disk('public')->delete($paket->foto);
|
||||||
}
|
}
|
||||||
|
|
||||||
$file = $request->file('foto');
|
$file = $request->file('foto');
|
||||||
$filename = time() . '_' . $file->getClientOriginalName();
|
$filename = time() . '_' . $file->getClientOriginalName();
|
||||||
$file->move(public_path('img/foto'), $filename);
|
$path = $file->storeAs('img/foto', $filename, 'public');
|
||||||
$data['foto'] = 'img/foto/' . $filename;
|
$data['foto'] = $path;
|
||||||
}
|
}
|
||||||
|
|
||||||
$paket->update($data);
|
$paket->update($data);
|
||||||
|
|
@ -135,12 +131,9 @@ public function destroy(string $id)
|
||||||
// Cari data berdasarkan primary key id_paket
|
// Cari data berdasarkan primary key id_paket
|
||||||
$paket = PaketFoto::where('id_paket', $id)->firstOrFail();
|
$paket = PaketFoto::where('id_paket', $id)->firstOrFail();
|
||||||
|
|
||||||
// 1. Cek dan hapus file foto dari folder public
|
|
||||||
if ($paket->foto) {
|
if ($paket->foto) {
|
||||||
File::delete(public_path($paket->foto));
|
Storage::disk('public')->delete($paket->foto);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2. Hapus data dari database
|
|
||||||
$paket->delete();
|
$paket->delete();
|
||||||
|
|
||||||
return redirect()->back()->with('success', 'Paket foto dan filenya berhasil dihapus!');
|
return redirect()->back()->with('success', 'Paket foto dan filenya berhasil dihapus!');
|
||||||
|
|
|
||||||
|
|
@ -75,7 +75,7 @@
|
||||||
<td style="width: 12%" class="text-center">Rp
|
<td style="width: 12%" class="text-center">Rp
|
||||||
{{ number_format($f->harga, 0, ',', '.') }}</td>
|
{{ number_format($f->harga, 0, ',', '.') }}</td>
|
||||||
<td style="width:10%" class="text-center">
|
<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;">
|
style="width: 50px; height: 50px; object-fit: cover;">
|
||||||
</td>
|
</td>
|
||||||
<td class="col-auto text-center">
|
<td class="col-auto text-center">
|
||||||
|
|
|
||||||
|
|
@ -15,9 +15,9 @@
|
||||||
|
|
||||||
<div class="mb-2">
|
<div class="mb-2">
|
||||||
<label class="form-label">Nama Paket</label>
|
<label class="form-label">Nama Paket</label>
|
||||||
<input type="text" class="form-control @error('nama') is-invalid @enderror"
|
<input type="text" name="nama"
|
||||||
style="font-size: 14px;" placeholder="Masukkan Nama Paket"
|
class="form-control @error('nama') is-invalid @enderror" style="font-size: 14px;"
|
||||||
value="{{ old('nama') }}">
|
placeholder="Masukkan Nama Paket" value="{{ old('nama') }}">
|
||||||
@error('nama')
|
@error('nama')
|
||||||
<div class="invalid-feedback">{{ $message }}</div>
|
<div class="invalid-feedback">{{ $message }}</div>
|
||||||
@enderror
|
@enderror
|
||||||
|
|
@ -27,12 +27,13 @@
|
||||||
<div class="col-12 col-md-6">
|
<div class="col-12 col-md-6">
|
||||||
<div class="mb-2">
|
<div class="mb-2">
|
||||||
<label class="form-label">Harga Paket</label>
|
<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;"
|
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 class="mb-0"><small class="text-muted mb-0">Dalam Rupiah</small>
|
||||||
</p>
|
</p>
|
||||||
@error('nama')
|
@error('harga')
|
||||||
<div class="invalid-feedback">{{ $message }}</div>
|
<div class="invalid-feedback">{{ $message }}</div>
|
||||||
@enderror
|
@enderror
|
||||||
|
|
||||||
|
|
@ -42,12 +43,13 @@
|
||||||
<div class="col-12 col-md-6">
|
<div class="col-12 col-md-6">
|
||||||
<div class="mb-2">
|
<div class="mb-2">
|
||||||
<label class="form-label">Durasi</label>
|
<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;"
|
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 class="mb-0"><small class="text-muted mb-0">Dalam Menit</small>
|
||||||
</p>
|
</p>
|
||||||
@error('nama')
|
@error('durasi')
|
||||||
<div class="invalid-feedback">{{ $message }}</div>
|
<div class="invalid-feedback">{{ $message }}</div>
|
||||||
@enderror
|
@enderror
|
||||||
|
|
||||||
|
|
@ -57,8 +59,8 @@
|
||||||
|
|
||||||
<div class="mb-2">
|
<div class="mb-2">
|
||||||
<label class="form-label">Deskripsi Paket</label>
|
<label class="form-label">Deskripsi Paket</label>
|
||||||
<textarea class="form-control @error('nama') is-invalid @enderror" rows="5" style="font-size: 14px;"
|
<textarea name="deskripsi" class="form-control @error('deskripsi') is-invalid @enderror" rows="5"
|
||||||
placeholder="Masukkan Deskripsi Paket">{{ old('deskripsi') }}</textarea>
|
style="font-size: 14px;" placeholder="Masukkan Deskripsi Paket">{{ old('deskripsi') }}</textarea>
|
||||||
@error('deskripsi')
|
@error('deskripsi')
|
||||||
<div class="invalid-feedback">{{ $message }}</div>
|
<div class="invalid-feedback">{{ $message }}</div>
|
||||||
@enderror
|
@enderror
|
||||||
|
|
|
||||||
|
|
@ -100,8 +100,8 @@ class="text-center text-muted d-none">
|
||||||
sini</p>
|
sini</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<img id="editImgPreview{{ $f->id_paket }}" src="{{ asset($f->foto) }}"
|
<img id="editImgPreview{{ $f->id_paket }}"
|
||||||
class="img-fluid w-100 h-100"
|
src="{{ asset('storage/' . $f->foto) }}" class="img-fluid w-100 h-100"
|
||||||
style="object-fit: cover; position: absolute; top: 0; left: 0;">
|
style="object-fit: cover; position: absolute; top: 0; left: 0;">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -12,8 +12,8 @@
|
||||||
<div class="col-12 col-sm-4">
|
<div class="col-12 col-sm-4">
|
||||||
@if ($f->foto)
|
@if ($f->foto)
|
||||||
{{-- Langsung img tanpa wrapper --}}
|
{{-- Langsung img tanpa wrapper --}}
|
||||||
<img src="{{ asset($f->foto) }}" class="custom-img-box-foto"
|
<img src="{{ asset('storage/' . $f->foto) }}" class="custom-img-box-foto"
|
||||||
onclick="showImage('{{ asset($f->foto) }}')">
|
onclick="showImage('{{ asset('storage/' . $f->foto) }}')">
|
||||||
@else
|
@else
|
||||||
{{-- Div pengganti kalau tidak ada foto --}}
|
{{-- Div pengganti kalau tidak ada foto --}}
|
||||||
<div
|
<div
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue