Form Tambah Produk (Create)

Irez Abdullah
Irez Abdullah
14 Okt 2025•901 dibaca
Form Tambah Produk (Create)

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