#8: Membuat Form Isi Data (Create & Store) – Memasukkan Nama Kategori
Halo, Petualang Form!
Di tutorial sebelumnya, kita sudah berhasil menampilkan daftar kategori dari database. Sekarang saatnya kita membuat fitur tambah kategori. Pengguna (admin) akan mengisi form, lalu data disimpan ke database. Di Laravel, ini adalah bagian Create dan Store dari CRUD. Kita akan membuat halaman form, menyimpan data, dan menambahkan tombol untuk mengaksesnya.
- Membuat method
create()diCategoryControlleruntuk menampilkan form tambah kategori. - Membuat method
store()untuk menyimpan data kategori ke database. - Membuat file view
create.blade.phpuntuk form kategori. - Menambahkan rute untuk
createdanstore. - Menambahkan tombol "Tambah Kategori" di halaman daftar kategori.
Langkah 1: Menambahkan Method Create dan Store di Controller
Buka file app/Http/Controllers/CategoryController.php. Kita akan menambahkan dua method baru:
<?php
namespace App\Http\Controllers;
use App\Models\Category;
use Illuminate\Http\Request;
class CategoryController extends Controller
{
public function index()
{
$categories = Category::all();
return view('kategori', compact('categories'));
}
// Menampilkan form tambah kategori
public function create()
{
return view('kategori-create');
}
// Menyimpan data kategori baru ke database
public function store(Request $request)
{
// Validasi input
$request->validate([
'name' => 'required|min:3|max:255|unique:categories,name',
]);
// Generate slug dari nama kategori (contoh: "Teknologi" -> "teknologi")
$slug = strtolower(str_replace(' ', '-', $request->name));
// Simpan ke database
Category::create([
'name' => $request->name,
'slug' => $slug,
]);
// Redirect ke halaman daftar kategori dengan pesan sukses
return redirect()->route('kategori.index')->with('success', 'Kategori berhasil ditambahkan!');
}
}
validate()memastikan nama kategori diisi, minimal 3 karakter, maksimal 255, dan belum ada di database.- Slug dibuat otomatis dari nama: huruf kecil, spasi diganti strip.
Category::create()memasukkan data baru ke tabel.redirect()->route()mengarahkan kembali ke halaman daftar kategori, dengan pesan sukses.
Langkah 2: Menambahkan Rute untuk Create dan Store
Buka routes/web.php. Tambahkan dua rute baru untuk menampilkan form dan menyimpan data:
use App\Http\Controllers\CategoryController;
Route::get('/kategori', [CategoryController::class, 'index'])->name('kategori.index');
Route::get('/kategori/create', [CategoryController::class, 'create'])->name('kategori.create');
Route::post('/kategori', [CategoryController::class, 'store'])->name('kategori.store');
Penjelasan:
->name('kategori.index')memberi nama pada rute, memudahkan pemanggilan di view.Route::getuntuk menampilkan form (create).Route::postuntuk mengirim data form (store).
/kategori/create sebelum /kategori karena Laravel membaca dari atas ke bawah. Jika terbalik, rute /kategori/create akan dianggap sebagai /kategori dengan parameter create.Langkah 3: Membuat View Form Kategori
Di folder resources/views, buat file baru bernama kategori-create.blade.php. Isi dengan kode berikut:
<!DOCTYPE html>
<html>
<head>
<title>Tambah Kategori Baru</title>
<style>
body { font-family: Arial; margin: 20px; }
.container { max-width: 500px; margin: auto; }
input, button { padding: 8px; margin: 5px 0; width: 100%; box-sizing: border-box; }
button { background: #4caf50; color: white; border: none; cursor: pointer; }
.error { color: red; font-size: 0.9em; }
</style>
</head>
<body>
<div class="container">
<h1>Tambah Kategori Baru</h1>
@if ($errors->any())
<div class="error">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<form action="{{ route('kategori.store') }}" method="POST">
@csrf
<label for="name">Nama Kategori:</label>
<input type="text" name="name" id="name" value="{{ old('name') }}" required>
<button type="submit">Simpan</button>
</form>
<p><a href="{{ route('kategori.index') }}">Kembali ke Daftar Kategori</a></p>
</div>
</body>
</html>
Penjelasan komponen:
@csrf→ token keamanan wajib untuk form POST di Laravel.{{ old('name') }}→ mengisi ulang input jika ada error, agar tidak perlu mengetik ulang.@if ($errors->any())→ menampilkan daftar error validasi jika ada.
Langkah 4: Menambahkan Tombol "Tambah Kategori" di Halaman Index
Sekarang kita tambahkan tombol di halaman daftar kategori agar pengguna bisa mengakses form tambah. Buka resources/views/kategori.blade.php dan tambahkan tombol di atas tabel:
<h1>Daftar Kategori Berita</h1>
@if (session('success'))
<div style="background: #d4edda; color: #155724; padding: 10px; border-radius: 5px; margin-bottom: 10px;">
{{ session('success') }}
</div>
@endif
<a href="{{ route('kategori.create') }}" style="display: inline-block; background: #007bff; color: white; padding: 8px 12px; text-decoration: none; border-radius: 5px; margin-bottom: 10px;">+ Tambah Kategori</a>
<table>
... (tabel tetap sama) ...
</table>
Juga tambahkan penanganan pesan sukses (session('success')) agar muncul notifikasi hijau setelah menyimpan.
Langkah 5: Uji Coba
Pastikan server Laravel berjalan (php artisan serve). Buka browser di http://localhost:8000/kategori. Sekarang akan ada tombol "+ Tambah Kategori". Klik tombol tersebut, kamu akan diarahkan ke form tambah kategori. Coba isi dengan nama kategori baru, misalnya "Pendidikan". Klik Simpan.
Jika berhasil, kamu akan diarahkan kembali ke halaman daftar kategori dan melihat pesan sukses. Kategori baru akan muncul di tabel.
Penjelasan Tambahan: CSRF dan Route Naming
- CSRF Protection: Laravel melindungi aplikasi dari serangan cross-site request forgery. Setiap form POST harus menyertakan token
@csrf. - Route Naming: Dengan memberi nama rute (
->name('kategori.create')), kita bisa memanggilnya di view menggunakanroute('kategori.create'). Jika URL berubah di masa depan, kita tidak perlu mengubah semua link. - Old Input: Fungsi
old()membantu mengembalikan nilai input yang sudah diisi sebelumnya saat validasi gagal, sehingga pengguna tidak perlu mengetik ulang.
Ringkasan Hari Ini
- ✅ Kita menambahkan method
create()danstore()diCategoryController. - ✅ Kita membuat view form
kategori-create.blade.phpdengan validasi dan CSRF. - ✅ Kita menambahkan rute GET untuk form dan POST untuk penyimpanan.
- ✅ Kita menambahkan tombol "Tambah Kategori" dan pesan sukses di halaman daftar kategori.
- ✅ Kita telah menyelesaikan fitur Create pada CRUD kategori.
🚀 Apa Selanjutnya?
Sekarang kita sudah bisa menampilkan (Read) dan menambah (Create) kategori. Selanjutnya kita akan membuat fitur Edit dan Delete (Update & Destroy) untuk melengkapi CRUD kategori. Setelah itu kita akan lanjut ke fitur berita yang lebih seru!
📝 Seri Tutorial Laravel 13 Pemula – Proyek Web Berita
✨ Selanjutnya: #9: Melihat Daftar Kategori (Read/Index) – Menampilkan Semua Kategori (sebenarnya sudah, tapi kita akan perbaiki tampilan dan menambahkan fitur edit/hapus)