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

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 databasename('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->namemengambil input bernamanameProduct::create([...])memasukkan data ke tabelproducts- 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 attackaction="{{ 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
- Buka halaman:
http://127.0.0.1:8000/products - Klik tombol + Tambah Produk

- Isi form
- Submit
Jika berhasil, data akan tersimpan dan tampil seperti ini:

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