Tutorial ini akan memandu Anda langkah demi langkah dalam membuat form dan menyimpan data yang diinput ke database menggunakan framework Laravel. Ini adalah bagian dari operasi Create dalam konsep CRUD (Create, Read, Update, Delete).
Langkah 1: Persiapan
Pastikan Anda sudah memiliki Model dan Controller yang akan digunakan. Pada tutorial ini, kita akan melanjutkan menggunakan Model Product dan Controller ProductController seperti yang sudah dibuat di tutorial sebelumnya.
Pastikan juga tabel products sudah ada di database Anda dan memiliki kolom seperti name dan description.
Langkah 2: Menambahkan Metode create dan store di Controller
Kita akan menambahkan dua metode baru di ProductController. Metode create akan bertugas menampilkan form, sedangkan metode store akan memproses data yang diinput dan menyimpannya ke database.
Buka file app/Http/Controllers/ProductController.php dan tambahkan atau lengkapi metode create dan store seperti di bawah ini:
<?php
namespace App\Http\Controllers;
use App\Models\Product;
use Illuminate\Http\Request;
class ProductController extends Controller
{
// ... metode index() dari tutorial sebelumnya ...
/**
* Show the form for creating a new resource.
*/
public function create()
{
return view('products.create');
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
// 1. Validasi input
$validatedData = $request->validate([
'name' => 'required|max:255',
'description' => 'required',
]);
// 2. Simpan data ke database
$product = new Product;
$product->name = $validatedData['name'];
$product->description = $validatedData['description'];
$product->save();
// 3. Redirect kembali dengan pesan sukses
return redirect()->route('products.index')->with('success', 'Produk berhasil ditambahkan!');
}
// ... metode resource lainnya ...
}
Penjelasan Kode
create(): Metode ini sangat sederhana, hanya mengembalikan view bernamaproducts.createyang akan berisi form input.store(Request $request):$request->validate(...): Laravel menyediakan validation yang kuat dan mudah digunakan. Di sini, kita memastikannamedandescriptiontidak kosong (required) dannametidak melebihi 255 karakter (max:255). Jika validasi gagal, Laravel akan secara otomatis mengembalikan pengguna ke halaman sebelumnya dengan pesan error.$product = new Product; ... $product->save();: Ini adalah cara Eloquent untuk membuat instance baru dari model dan menyimpan datanya ke tabel.redirect()->route('products.index'): Setelah berhasil menyimpan, kita mengarahkan pengguna kembali ke halaman daftar produk.->with('success', ...)adalah cara untuk menambahkan pesan kilat (flash message) yang hanya akan tersedia untuk permintaan berikutnya.
Langkah 3: Membuat View untuk Form Input
Sekarang, buat file baru create.blade.php di dalam direktori resources/views/products/.
File ini akan berisi kode HTML untuk form input.
resources/views/products/create.blade.php:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Tambah Produk Baru</title>
</head>
<body>
<h1>Tambah Produk Baru</h1>
@if ($errors->any())
<div>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<form action="{{ route('products.store') }}" method="POST">
@csrf
<div>
<label for="name">Nama Produk:</label>
<input type="text" id="name" name="name" value="{{ old('name') }}">
</div>
<br>
<div>
<label for="description">Deskripsi Produk:</label>
<textarea id="description" name="description">{{ old('description') }}</textarea>
</div>
<br>
<button type="submit">Simpan</button>
</form>
</body>
</html>
Penjelasan Kode
@if ($errors->any()): Blok ini akan menampilkan pesan error dari validasi jika ada.<form action="{{ route('products.store') }}" method="POST">: Ini adalah form HTML yang akan mengirimkan data. Atributactionmenggunakan fungsiroute()untuk menghasilkan URL yang benar ke metodestore.@csrf: Ini adalah direktif Blade yang sangat penting. Ini menghasilkan token CSRF (Cross-Site Request Forgery) tersembunyi untuk melindungi aplikasi Anda dari serangan. Laravel akan menolak permintaan POST tanpa token ini.value="{{ old('name') }}": Fungsiold()adalah fitur Laravel yang secara otomatis akan mengisi kembali input form dengan nilai yang sebelumnya diinput jika terjadi kesalahan validasi. Ini sangat membantu pengalaman pengguna.
Langkah 4: Menambahkan Route
Terakhir, tambahkan route baru untuk menghubungkan URL dengan metode create dan store yang telah kita buat.
Buka file routes/web.php dan tambahkan route berikut. Jika Anda menggunakan --resource saat membuat controller, route ini sudah otomatis dibuat.
use App\Http\Controllers\ProductController;
use Illuminate\Support\Facades\Route;
// ... route lainnya ...
Route::get('/products/create', [ProductController::class, 'create'])->name('products.create');
Route::post('/products', [ProductController::class, 'store'])->name('products.store');
Mengakses Halaman
Sekarang, Anda dapat mengakses URL http://localhost:8000/products/create di browser. Anda akan melihat form input. Setelah mengisi form dan menekan tombol Simpan, data akan disimpan ke database, dan Anda akan dialihkan kembali ke halaman daftar produk dengan pesan sukses.
Selamat! Anda telah berhasil mengimplementasikan operasi Create dalam CRUD Laravel.