fix kategori

This commit is contained in:
Muzakki Parsaoran Siregar 2025-09-02 10:45:15 +07:00
parent 21d61178ac
commit eae9f9fd28
3 changed files with 68 additions and 52 deletions

View File

@ -1,29 +1,32 @@
<?php <?php
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Models\Kategori; use App\Models\Kategori;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Storage;
class KategoriController extends Controller class KategoriController extends Controller
{ {
// Menampilkan semua kategori di halaman admin
public function index() public function index()
{ {
$kategori = Kategori::all(); $kategori = Kategori::all();
return view('admin.kategori.index', compact('kategori')); return view('admin.kategori.index', compact('kategori'));
} }
// Menampilkan detail kategori (kalau dipakai di API)
public function show(Kategori $kategori) public function show(Kategori $kategori)
{ {
return response()->json($kategori, 200); return response()->json($kategori, 200);
} }
// Simpan kategori baru
public function store(Request $request) public function store(Request $request)
{ {
$request->validate([ $request->validate([
'nama' => 'required', 'nama' => 'required|string|max:255',
'deskripsi' => 'nullable', 'deskripsi' => 'nullable|string',
'foto' => 'nullable|image|mimes:jpg,jpeg,png|max:2048' 'foto' => 'nullable|image|mimes:jpg,jpeg,png|max:2048'
]); ]);
@ -32,35 +35,45 @@ class KategoriController extends Controller
$data['foto'] = $request->file('foto')->store('kategori', 'public'); $data['foto'] = $request->file('foto')->store('kategori', 'public');
} }
$kategori = Kategori::create($data); Kategori::create($data);
return response()->json($kategori, 201); // Jika request berasal dari form admin → redirect
return redirect()->route('admin.kategori.index')
->with('success', 'Kategori berhasil ditambahkan!');
} }
// Update kategori
public function update(Request $request, Kategori $kategori) public function update(Request $request, Kategori $kategori)
{ {
$request->validate([ $request->validate([
'nama' => 'required', 'nama' => 'required|string|max:255',
'deskripsi' => 'nullable', 'deskripsi' => 'nullable|string',
'foto' => 'nullable|image|mimes:jpg,jpeg,png|max:2048' 'foto' => 'nullable|image|mimes:jpg,jpeg,png|max:2048'
]); ]);
$data = $request->all(); $data = $request->all();
if ($request->hasFile('foto')) { if ($request->hasFile('foto')) {
if ($kategori->foto) Storage::disk('public')->delete($kategori->foto); if ($kategori->foto) {
Storage::disk('public')->delete($kategori->foto);
}
$data['foto'] = $request->file('foto')->store('kategori', 'public'); $data['foto'] = $request->file('foto')->store('kategori', 'public');
} }
$kategori->update($data); $kategori->update($data);
return response()->json($kategori, 200); return redirect()->route('admin.kategori.index')
->with('success', 'Kategori berhasil diperbarui!');
} }
// Hapus kategori
public function destroy(Kategori $kategori) public function destroy(Kategori $kategori)
{ {
if ($kategori->foto) Storage::disk('public')->delete($kategori->foto); if ($kategori->foto) {
Storage::disk('public')->delete($kategori->foto);
}
$kategori->delete(); $kategori->delete();
return response()->json(['message' => 'Kategori berhasil dihapus'], 200); return redirect()->route('admin.kategori.index')
->with('success', 'Kategori berhasil dihapus!');
} }
} }

View File

@ -55,42 +55,6 @@
</form> </form>
</td> </td>
</tr> </tr>
<!-- Modal Edit -->
<div class="modal fade" id="modalEdit{{ $item->id }}" tabindex="-1">
<div class="modal-dialog">
<form action="{{ route('admin.kategori.update', $item->id) }}" method="POST" enctype="multipart/form-data" class="modal-content">
@csrf
@method('PUT')
<div class="modal-header">
<h5 class="modal-title">Edit Kategori</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<div class="mb-3">
<label>Nama</label>
<input type="text" name="nama" value="{{ $item->nama }}" class="form-control" required>
</div>
<div class="mb-3">
<label>Deskripsi</label>
<textarea name="deskripsi" class="form-control" rows="3">{{ $item->deskripsi }}</textarea>
</div>
<div class="mb-3">
<label>Foto</label>
<input type="file" name="foto" class="form-control">
@if($item->foto)
<small class="text-muted">Foto saat ini:</small><br>
<img src="{{ asset('storage/'.$item->foto) }}" alt="foto" width="70" class="mt-1 rounded">
@endif
</div>
</div>
<div class="modal-footer">
<button class="btn btn-secondary" data-bs-dismiss="modal">Batal</button>
<button class="btn btn-primary">Simpan Perubahan</button>
</div>
</form>
</div>
</div>
@empty @empty
<tr> <tr>
<td colspan="5" class="text-center text-muted">Belum ada kategori</td> <td colspan="5" class="text-center text-muted">Belum ada kategori</td>
@ -132,4 +96,42 @@
</form> </form>
</div> </div>
</div> </div>
<!-- Modal Edit (Diletakkan di luar tabel) -->
@foreach ($kategori as $item)
<div class="modal fade" id="modalEdit{{ $item->id }}" tabindex="-1">
<div class="modal-dialog">
<form action="{{ route('admin.kategori.update', $item->id) }}" method="POST" enctype="multipart/form-data" class="modal-content">
@csrf
@method('PUT')
<div class="modal-header">
<h5 class="modal-title">Edit Kategori</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<div class="mb-3">
<label>Nama</label>
<input type="text" name="nama" value="{{ $item->nama }}" class="form-control" required>
</div>
<div class="mb-3">
<label>Deskripsi</label>
<textarea name="deskripsi" class="form-control" rows="3">{{ $item->deskripsi }}</textarea>
</div>
<div class="mb-3">
<label>Foto</label>
<input type="file" name="foto" class="form-control">
@if($item->foto)
<small class="text-muted">Foto saat ini:</small><br>
<img src="{{ asset('storage/'.$item->foto) }}" alt="foto" width="70" class="mt-1 rounded">
@endif
</div>
</div>
<div class="modal-footer">
<button class="btn btn-secondary" data-bs-dismiss="modal">Batal</button>
<button class="btn btn-primary">Simpan Perubahan</button>
</div>
</form>
</div>
</div>
@endforeach
@endsection @endsection

View File

@ -7,6 +7,7 @@
<title>@yield('title', 'Admin Panel')</title> <title>@yield('title', 'Admin Panel')</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons/font/bootstrap-icons.css"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons/font/bootstrap-icons.css">
<script src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"></script>
<style> <style>
body { body {
background-color: #f8f9fa; background-color: #f8f9fa;