Menambahkan fungsi cache pada controller

This commit is contained in:
adelyaou 2025-07-22 11:41:41 +07:00
parent 0696db67d2
commit c0a3a693da
5 changed files with 243 additions and 30 deletions

View File

@ -2,30 +2,117 @@
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;
class KaryawanController extends Controller
{
private $karyawan = [
1 => ['nama' => 'Budi', 'umur' => 20, 'jabatan' => 'Manager'],
2 => ['nama' => 'Siti', 'umur' => 21, 'jabatan' => 'Staff'],
3 => ['nama' => 'Andi', 'umur' => 22, 'jabatan' => 'Staff'],
4 => ['nama' => 'Caca', 'umur' => 23, 'jabatan' => 'Staff'],
5 => ['nama' => 'Rudy', 'umur' => 24, 'jabatan' => 'Staff'],
];
// public function init()
// {
// $karyawan = [
// 1 => ['nama' => 'Budi', 'umur' => 20, 'jabatan' => 'Manager'],
// 2 => ['nama' => 'Siti', 'umur' => 21, 'jabatan' => 'Staff'],
// 3 => ['nama' => 'Andi', 'umur' => 22, 'jabatan' => 'Staff'],
// 4 => ['nama' => 'Caca', 'umur' => 23, 'jabatan' => 'Staff'],
// 5 => ['nama' => 'Rudy', 'umur' => 24, 'jabatan' => 'Staff'],
// ];
// Cache::put('karyawan', $karyawan, now()->addMinutes(60));
// return 'Data karyawan berhasil dimasukkan ke cache';
// }
public function index()
{
$karyawan = $this->karyawan;
$karyawan = Cache::get('karyawan', []);
return view('karyawan.index', compact('karyawan'));
}
public function create()
{
return view('karyawan.create');
}
public function store(Request $request)
{
$request->validate([
'nama' => 'required',
'umur' => 'required|integer',
'jabatan' => 'required',
]);
$karyawanBaru = [
'nama' => $request->nama,
'umur' => $request->umur,
'jabatan' => $request->jabatan,
];
$karyawan = Cache::get('karyawan', []);
$karyawan[] = $karyawanBaru;
Cache::put('karyawan', $karyawan, now()->addMinutes(60));
return redirect()->route('karyawan.index')->with('success', 'Data berhasil ditambahkan!');
}
public function show($id)
{
$data = $this->karyawan[$id] ?? null;
$karyawan = Cache::get('karyawan', []);
$data = $karyawan[$id] ?? null;
if (!$data) {
abort(404, 'Karyawan tidak ditemukan');
}
return view('karyawan.show', compact('data'));
}
public function edit($id)
{
$karyawan = Cache::get('karyawan', []);
if (!isset($karyawan[$id])) {
return redirect()->route('karyawan.index')->with('error', 'Data tidak ditemukan');
}
$data = $karyawan[$id];
return view('karyawan.edit', compact('data', 'id'));
}
public function update(Request $request, $id)
{
$request->validate([
'nama' => 'required',
'umur' => 'required|integer',
'jabatan' => 'required',
]);
$karyawan = Cache::get('karyawan', []);
if (!isset($karyawan[$id])) return redirect()->route('karyawan.index')->with('error', 'Data tidak ditemukan');
$karyawan[$id] = [
'nama' => $request->nama,
'umur' => $request->umur,
'jabatan' => $request->jabatan,
];
Cache::put('karyawan', $karyawan, now()->addMinutes(60));
return redirect()->route('karyawan.index')->with('success', 'Data berhasil diperbarui!');
}
public function destroy($id)
{
$karyawan = Cache::get('karyawan', []);
if (!isset($karyawan[$id])) {
return redirect()->route('karyawan.index')->with('error', 'Data tidak ditemukan');
}
unset($karyawan[$id]);
// Simpan ulang ke cache di sini
Cache::put('karyawan', $karyawan, now()->addMinutes(60));
return redirect()->route('karyawan.index')->with('success', 'Data berhasil dihapus!');
}
}

View File

@ -0,0 +1,106 @@
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<title>Tambahkan Data Siswa</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: 'Poppins', sans-serif;
}
body {
background: linear-gradient(135deg, #b64fdb, #c7f0e1);
min-height: 100vh;
display: flex;
justify-content: center;
align-items: center;
color: #333;
}
.container {
width: 90%;
max-width: 600px;
background: #ffffff;
padding: 40px;
border-radius: 20px;
box-shadow: 0 8px 25px rgba(0,0,0,0.15);
}
h1 {
text-align: center;
margin-bottom: 30px;
color: #2c3e50;
}
label {
font-weight: 600;
display: block;
margin-bottom: 8px;
color: #34495e;
}
input {
width: 100%;
padding: 12px;
margin-bottom: 20px;
border-radius: 12px;
border: 1px solid #ddd;
font-size: 16px;
transition: all 0.3s ease;
}
input:focus {
outline: none;
border: 1px solid #3498db;
box-shadow: 0 0 8px rgba(52,152,219,0.5);
}
.button {
width: 100%;
padding: 14px;
background: #b64fdb;
color: white;
border: none;
border-radius: 50px;
font-weight: 600;
font-size: 16px;
cursor: pointer;
transition: background 0.3s;
}
.alert {
background: #f8d7da;
color: #721c24;
padding: 15px;
border-radius: 10px;
margin-bottom: 20px;
border-left: 5px solid #f5c6cb;
}
</style>
</head>
<body>
<div class="container">
<h1>Tambahkan Data Karyawan</h1>
@if($errors->any())
<div class="alert">
@foreach($errors->all() as $error)
<p>{{ $error }}</p>
@endforeach
</div>
@endif
<form action="{{ route('karyawan.store') }}" method="POST">
@csrf
<label>Nama:</label>
<input type="text" name="nama" required>
<label>Umur:</label>
<input type="number" name="umur" required>
<label>Jabatan:</label>
<input type="text" name="jabatan" required>
<button type="submit" class="button">Simpan Data</button>
</form>
</div>
</body>
</html>

View File

@ -47,13 +47,13 @@
}
input:focus {
outline: none;
border: 1px solid #3498db;
border: 1px solid #b64fdb;
box-shadow: 0 0 8px rgba(52,152,219,0.5);
}
.button {
width: 100%;
padding: 14px;
background: #3498db;
background: #b64fdb;
color: white;
border: none;
border-radius: 50px;
@ -62,9 +62,7 @@
cursor: pointer;
transition: background 0.3s;
}
.button:hover {
background: #2980b9;
}
.alert {
background: #f8d7da;
color: #721c24;
@ -78,22 +76,22 @@
<body>
<div class="container">
<h1>Hapus Data Siswa</h1>
<h1>Edit Data Karyawan</h1>
<form action="{{ route('siswa.destroy', $id) }}" method="POST">
<form action="{{ route('karyawan.update', $id) }}" method="POST">
@csrf
@method('DELETE')
@method('PUT')
<label>Nama:</label>
<input type="text" name="nama" value="{{ $siswa['nama'] }}" required>
<input type="text" name="nama" value="{{ $data['nama'] }}" required>
<label>Kelas:</label>
<input type="text" name="kelas" value="{{ $siswa['kelas'] }}" required>
<label>Umur:</label>
<input type="number" name="umur" value="{{ $data['umur'] }}" required>
<Label>Absen:</label>
<input type="number" name="absen" value="{{ $siswa['absen'] }}" required>
<Label>Jabatan:</label>
<input type="text" name="jabatan" value="{{ $data['jabatan'] }}" required>
<button type="submit" class="button"></button>
<button type="submit" class="button">Update</button>
</form>
</div>

View File

@ -122,14 +122,20 @@
</tr>
</thead>
<tbody>
@foreach($karyawan as $index => $item)
@foreach($karyawan as $id => $item)
<tr>
<td>{{ $index + 0 }}</td>
<td>{{ $loop->iteration }}</td>
<td>{{ $item['nama'] }}</td>
<td>{{ $item['umur'] }}</td>
<td>{{ $item['jabatan'] }}</td>
<td>
<a href="{{ url('/karyawan/' . $index) }}" class="button-opsi">Lihat</a>
<a href="{{ route('karyawan.show', $id) }}" class="button-opsi">Lihat</a>
<a href="{{ route('karyawan.edit', $id) }}" class="button-opsi">Edit</a>
<form action="{{ route('karyawan.destroy', $id) }}" method="POST" style="display: inline;">
@csrf
@method('DELETE')
<button type="submit" class="button-opsi">Hapus</button>
</form>
</td>
</tr>
@endforeach
@ -138,6 +144,8 @@
@else
<p>Belum ada data karyawan yang terdaftar.</p>
@endif
<a href="{{ route('karyawan.create') }}" class="button">+ Tambah Data Karyawan</a>
</div>
</body>
</html>

View File

@ -2,6 +2,7 @@
use Illuminate\Support\Facades\Route;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;
use Illuminate\App\Http\Controllers\SiswaController;
use App\Http\Controllers\KaryawanController;
@ -54,9 +55,22 @@ Route::get('/siswa/{id}', [App\Http\Controllers\SiswaController::class, 'show'])
// KARYAWAN
Route::get('/karyawan', [KaryawanController::class, 'index']);
Route::get('/karyawan/{id}', [KaryawanController::class, 'show']);
//cache init
Route::get('/karyawan/init', [KaryawanController::class, 'init']);
//tambah karyawan
Route::get('/karyawan/create', [KaryawanController::class, 'create'])->name('karyawan.create');
Route::post('/karyawan', [KaryawanController::class, 'store'])->name('karyawan.store');
Route::get('/karyawan', [KaryawanController::class, 'index'])->name('karyawan.index');
//lihat daftar dan detail
Route::get('/karyawan/{id}', [KaryawanController::class, 'show'])->name('karyawan.show');
//editkaryawan
Route::get('/karyawan/{id}/edit', [KaryawanController::class, 'edit'])->name('karyawan.edit');
Route::put('/karyawan/{id}', [KaryawanController::class, 'update'])->name('karyawan.update');
//hapus
Route::delete('/karyawan/{id}', [KaryawanController::class, 'destroy'])->name('karyawan.destroy');