🎯 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
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
