fix kategori
This commit is contained in:
parent
21d61178ac
commit
eae9f9fd28
@ -1,29 +1,32 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Kategori;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
|
||||
class KategoriController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$kategori = Kategori::all();
|
||||
return view('admin.kategori.index', compact('kategori'));
|
||||
}
|
||||
|
||||
// Menampilkan semua kategori di halaman admin
|
||||
public function index()
|
||||
{
|
||||
$kategori = Kategori::all();
|
||||
return view('admin.kategori.index', compact('kategori'));
|
||||
}
|
||||
|
||||
// Menampilkan detail kategori (kalau dipakai di API)
|
||||
public function show(Kategori $kategori)
|
||||
{
|
||||
return response()->json($kategori, 200);
|
||||
}
|
||||
|
||||
// Simpan kategori baru
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'nama' => 'required',
|
||||
'deskripsi' => 'nullable',
|
||||
'nama' => 'required|string|max:255',
|
||||
'deskripsi' => 'nullable|string',
|
||||
'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');
|
||||
}
|
||||
|
||||
$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)
|
||||
{
|
||||
$request->validate([
|
||||
'nama' => 'required',
|
||||
'deskripsi' => 'nullable',
|
||||
'nama' => 'required|string|max:255',
|
||||
'deskripsi' => 'nullable|string',
|
||||
'foto' => 'nullable|image|mimes:jpg,jpeg,png|max:2048'
|
||||
]);
|
||||
|
||||
$data = $request->all();
|
||||
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');
|
||||
}
|
||||
|
||||
$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)
|
||||
{
|
||||
if ($kategori->foto) Storage::disk('public')->delete($kategori->foto);
|
||||
if ($kategori->foto) {
|
||||
Storage::disk('public')->delete($kategori->foto);
|
||||
}
|
||||
$kategori->delete();
|
||||
|
||||
return response()->json(['message' => 'Kategori berhasil dihapus'], 200);
|
||||
return redirect()->route('admin.kategori.index')
|
||||
->with('success', 'Kategori berhasil dihapus!');
|
||||
}
|
||||
}
|
||||
|
@ -55,42 +55,6 @@
|
||||
</form>
|
||||
</td>
|
||||
</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
|
||||
<tr>
|
||||
<td colspan="5" class="text-center text-muted">Belum ada kategori</td>
|
||||
@ -132,4 +96,42 @@
|
||||
</form>
|
||||
</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
|
||||
|
@ -7,6 +7,7 @@
|
||||
<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 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>
|
||||
body {
|
||||
background-color: #f8f9fa;
|
||||
|
Loading…
Reference in New Issue
Block a user