Laravel 13 Pemula #8: Membuat Form Isi Data (Create & Store) – Memasukkan Nama Kategori

Tutorial Laravel 13 Pemula • Proyek Web Berita

#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.

🎯 Tujuan Kita:
  1. Membuat method create() di CategoryController untuk menampilkan form tambah kategori.
  2. Membuat method store() untuk menyimpan data kategori ke database.
  3. Membuat file view create.blade.php untuk form kategori.
  4. Menambahkan rute untuk create dan store.
  5. Menambahkan tombol "Tambah Kategori" di halaman daftar kategori.

Langkah 1: Menambahkan Method Create dan Store di Controller

📝 Update CategoryController.php

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!');
    }
}
💡 Penjelasan:
  • 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

🛣️ Update routes/web.php

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::get untuk menampilkan form (create).
  • Route::post untuk mengirim data form (store).
📌 Catatan: Urutan rute penting! Letakkan /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

🎨 Buat file kategori-create.blade.php

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

✏️ Edit kategori.blade.php

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.

💡 Uji Validasi: Coba isi form dengan nama yang sudah ada (misal "Teknologi"), atau dengan nama kurang dari 3 huruf. Kamu akan melihat pesan error yang muncul.

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 menggunakan route('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() dan store() di CategoryController.
  • ✅ Kita membuat view form kategori-create.blade.php dengan 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!

🌟 Selamat! Kamu sudah berhasil membuat form input dan menyimpan data ke database. Ini adalah kemampuan fundamental dalam pengembangan web. Berikan tepuk tangan untuk dirimu sendiri!

📝 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)

Lebih baru Lebih lama

نموذج الاتصال