fix kategori
This commit is contained in:
parent
21d61178ac
commit
eae9f9fd28
@ -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
|
||||||
{
|
{
|
||||||
public function index()
|
// Menampilkan semua kategori di halaman admin
|
||||||
{
|
public function index()
|
||||||
$kategori = Kategori::all();
|
{
|
||||||
return view('admin.kategori.index', compact('kategori'));
|
$kategori = Kategori::all();
|
||||||
}
|
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!');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user