🎯 Tujuan

Mampu membuat form tambah produk, mengirim data dari form ke server, dan menyimpannya ke database menggunakan Laravel. Materi ini menjelaskan alur lengkap mulai dari routing → controller → form → penyimpanan data → redirect.


🧩 Materi & Langkah Praktik

1. Tambahkan Route untuk Create dan Store

Untuk membuat form dan menyimpan data, kita membutuhkan dua route:

  • Route GET → menampilkan halaman form (create)
  • Route POST → menerima data dari form (store)

Edit file:

routes/web.php

Tambahkan:

use App\Http\Controllers\ProductController;

Route::get('/products', [ProductController::class, 'index'])->name('products.index');
Route::get('/products/create', [ProductController::class, 'create'])->name('products.create');
Route::post('/products', [ProductController::class, 'store'])->name('products.store');

Penjelasan

  • /products/create → halaman form
  • /products (POST) → proses insert data ke database
  • name('products.create') → memberi nama route agar mudah dipanggil dalam Blade (contoh: route('products.create'))

2. Tambahkan Method create dan store di ProductController

Buka file:

app/Http/Controllers/ProductController.php

Tambahkan method berikut:

<?php

namespace App\Http\Controllers;

use App\Models\Product;
use Illuminate\Http\Request; // Jangan lupa ini

class ProductController extends Controller
{
    public function create()
    {
        return view('products.create');
    }

    public function store(Request $request)
    {
        Product::create([
            'name' => $request->name,
            'price' => $request->price,
            'description' => $request->description,
            'stock' => $request->stock,
        ]);

        return redirect()->route('products.index')->with('success', 'Produk berhasil ditambahkan!');
    }
}

Penjelasan

create()

  • Hanya menampilkan halaman form
  • Tidak mengambil data dari database
  • Mengarahkan ke file Blade products/create.blade.php

store(Request $request)

  • Menerima data dari form HTML
  • $request->name mengambil input bernama name
  • Product::create([...]) memasukkan data ke tabel products
  • Setelah berhasil, diarahkan kembali ke halaman list produk dengan pesan sukses

Pastikan model Product mengaktifkan $fillable, misalnya:

protected $fillable = ['name', 'price', 'stock', 'description'];

Agar mass assignment bisa dilakukan.


3. Buat File View create.blade.php

Buat file:

resources/views/products/create.blade.php

Isi:

@extends('layouts.main')

@section('title', 'Tambah Produk')

@section('content')
<div class="d-flex justify-content-between align-items-center mb-3">
    <h2>Tambah Produk Baru</h2>
    <a href="{{ route('products.index') }}" class="btn btn-secondary btn-sm">← Kembali</a>
</div>

<form action="{{ route('products.store') }}" method="POST" class="card p-4 shadow-sm">
    @csrf
    <div class="mb-3">
        <label>Nama Produk</label>
        <input type="text" name="name" class="form-control" required>
    </div>

    <div class="mb-3">
        <label>Harga</label>
        <input type="number" name="price" class="form-control" required>
    </div>

    <div class="mb-3">
        <label>Stok</label>
        <input type="number" name="stock" class="form-control" required>
    </div>

    <div class="mb-3">
        <label>Deskripsi</label>
        <textarea name="description" rows="3" class="form-control"></textarea>
    </div>

    <button type="submit" class="btn btn-primary">Simpan</button>
</form>
@endsection

Penjelasan

  • @csrf → sangat penting untuk keamanan form, mencegah CSRF attack
  • action="{{ route('products.store') }}" → data dikirim ke route POST
  • Semua input memiliki name="" agar bisa diterima oleh controller

4. Tambahkan Tombol Tambah Produk di Halaman Index

Agar pengguna bisa masuk ke halaman form, tambahkan tombol di bagian atas file:

resources/views/products/index.blade.php

Seperti ini:

<a href="{{ route('products.create') }}" class="btn btn-primary btn-sm">+ Tambah Produk</a>

5. Coba Jalankan Aplikasinya

  1. Buka halaman: http://127.0.0.1:8000/products
  2. Klik tombol + Tambah Produk
  3. Isi form
  4. Submit

Jika berhasil, data akan tersimpan dan tampil seperti ini: YPn6aS.png


🗂️ Struktur Folder Penting

project-laravel/
├── 📁 app/
│   └── 📁 Http/
│       └── 📁 Controllers/
│           └── ProductController.php
├── 📁 resources/
│   └── 📁 views/
│       └── 📁 products/
│           ├── index.blade.php
│           └── create.blade.php
├── 📁 routes/
│   └── web.php