Implementasi CRUD: Create & Read Data
Modul 04
"Mengolah Data Nyata ke dalam Aplikasi"
CRUD adalah singkatan dari Create, Read, Update, Delete. Ini adalah 4 operasi wajib yang menggerakkan mayoritas aplikasi web saat ini. Di modul ini, kita akan fokus pada dua huruf pertama: Read (menampilkan data dari database) dan Create (menambahkan data baru melalui form).
LAB: Read & Create Data
01 Menampilkan Data (Read)
Buka PostController.php yang sudah kita buat
sebelumnya. Ubah method index agar mengambil data langsung dari Model
Eloquent:
<?php
namespace App\Http\Controllers;
use App\Models\Post; // Pastikan model di-import
use Illuminate\Http\Request;
class PostController extends Controller
{
public function index()
{
// Mengambil semua post dan diurutkan dari yang terbaru
$posts = Post::latest()->get();
return view('posts.index', compact('posts'));
}
}
02 Menyiapkan Rute Create
Untuk membuat fitur penambahan data, kita butuh dua rute. Satu (GET)
untuk menampilkan Form, dan satu lagi (POST) untuk memproses datanya. Buka
routes/web.php:
use App\Http\Controllers\PostController;
Route::get('/posts', [PostController::class, 'index'])->name('posts.index');
Route::get('/posts/create', [PostController::class, 'create'])->name('posts.create');
Route::post('/posts', [PostController::class, 'store'])->name('posts.store');
03 Membuat Form di Blade
Buat file baru di
resources/views/posts/create.blade.php dan tuliskan struktur form HTML
sederhana:
<form action="{{ route('posts.store') }}" method="POST">
{{-- INGAT: Ini sangat penting untuk keamanan form di Laravel! --}}
@csrf
<div>
<label>Judul Post:</label>
<input type="text" name="title" required>
</div>
<div>
<label>Isi Konten:</label>
<textarea name="content" required></textarea>
</div>
<button type="submit">Simpan Data</button>
</form>
04 Menyimpan Data ke Database
Kembali ke PostController.php. Kita buat fungsi
store untuk menangkap data dari Form dan menyimpannya:
public function store(Request $request)
{
// Simpan ke database menggunakan teknik Mass Assignment
Post::create([
'title' => $request->title,
'content' => $request->content
]);
// Kembalikan user ke halaman daftar post
return redirect()->route('posts.index');
}
Jangan pernah melupakan
perintah @csrf di dalam tag form Anda! Laravel akan menolak mentah-mentah
(menampilkan error 419 Page Expired) setiap request form POST, PUT, atau DELETE yang
tidak menyertakan token ini. Ini adalah tembok pelindung utama aplikasi Anda dari
serangan Cross-Site Request Forgery (CSRF).