Panduan Lengkap Alur Kerja Laravel: Dari Inisialisasi Hingga Modul CRUD

Alur Kerja Framework Laravel

Mengembangkan aplikasi berbasis web menggunakan Laravel Framework membutuhkan pemahaman yang runtut mengenai arsitektur Model-View-Controller (MVC). Proses pembangunan aplikasi dimulai saat request pertama kali masuk ke server hingga akhirnya sistem mampu mengelola basis data secara dinamis melalui modul CRUD (Create, Read, Update, Delete).

Artikel ini membahas secara mendalam breakdown alur kerja Laravel dari eksekusi awal hingga penyelesaian modul pengelolaan data siswa (students). Setiap langkah dirancang sederhana, sistematis, dan langsung dapat dipraktikkan.


1. Siklus Eksekusi Pertama (First Run & Default Page)

Saat perintah php artisan serve dijalankan dan URL diakses melalui peramban, Laravel menjalankan mekanisme bootstrap internal untuk memproses permintaan pengguna hingga menampilkan halaman default.

Alur eksekusi internal saat aplikasi pertama kali berjalan:

  1. Titik Masuk (Entry Point): Peramban mengirimkan permintaan HTTP ke public/index.php.
  2. Autoload & Bootstrap: File vendor/autoload.php memuat seluruh pustaka modul, kemudian dilanjutkan dengan menginisialisasi kernel aplikasi Laravel di bootstrap/app.php.
  3. Routing HTTP: Permintaan diteruskan ke file routes/web.php untuk dicocokkan dengan rute titik akar (root route):
    Route::get('/', function () {
        return view('welcome');
    });
  4. Penyajian Tampilan (View): Laravel memanggil pustaka templat Blade di resources/views/welcome.blade.php dan mengembalikan respons HTML utuh ke layar peramban.

2. Konfigurasi Basis Data dan Migrasi Tabel

Integrasi dengan basis data dilakukan melalui konfigurasi berkas lingkungan dan pembuatan skema tabel menggunakan fasilitas Migration.

A. Pengaturan Kredensial Environment

Buka berkas .env pada direktori utama proyek, lalu sesuaikan parameter koneksi basis data MySQL:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_student_db
DB_USERNAME=root
DB_PASSWORD=

B. Pembuatan Model dan File Migrasi

Gunakan perintah Artisan CLI untuk membuat berkas Model dan Migration sekaligus:

php artisan make:model Student -m

Buka berkas migrasi yang terbentuk di direktori database/migrations/xxxx_xx_xx_xxxxxx_create_students_table.php, lalu definisikan atribut kolom sesuai kebutuhan data siswa:

public function up(): void
{
    Schema::create('students', function (Blueprint $table) {
        $table->id();
        $table->string('name');
        $table->string('email')->unique();
        $table->string('major');
        $table->timestamps();
    });
}

Jalankan migrasi untuk mendefinisikan struktur tabel ke dalam basis data:

php artisan migrate

3. Konfigurasi Eloquent Model

Eloquent ORM memerlukan deklarasi properti penampung massal untuk mencegah kerentanan keamanan Mass Assignment Exception saat proses insert atau update data.

Buka berkas app/Models/Student.php dan sertakan array $fillable:

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Student extends Model
{
    use HasFactory;

    protected $fillable = ['name', 'email', 'major'];
}

4. Pembuatan Controller dan Pendaftaran Rute Resource

Modul CRUD dipusatkan pada pengontrol berbasis sumber daya (Resource Controller) yang terhubung otomatis ke tabel routing aplikasi.

A. Membuat Resource Controller

php artisan make:controller StudentController --resource

B. Mengonfigurasi Router Web

Tambahkan rute tunggal di routes/web.php untuk mengaktifkan seluruh titik akhir RESTful:

use App\Http\Controllers\StudentController;

Route::resource('students', StudentController::class);

Pengaturan ini secara otomatis menyediakan titik akses rute berikut:

Metode HTTP URI Rute Nama Aksi (Method) Fungsi Utama
GET /students index Menampilkan daftar semua data siswa
GET /students/create create Menampilkan formulir tambah data baru
POST /students store Validasi dan simpan data baru ke basis data
GET /students/{student}/edit edit Menampilkan formulir penyuntingan data
PUT/PATCH /students/{student} update Validasi dan simpan pembaruan data
DELETE /students/{student} destroy Hapus baris data dari basis data

5. Implementasi Logika Bisnis pada Controller

Buka app/Http/Controllers/StudentController.php dan tuliskan instruksi pengolahan data untuk tiap fungsi:

namespace App\Http\Controllers;

use App\Models\Student;
use Illuminate\Http\Request;

class StudentController extends Controller
{
    public function index()
    {
        $students = Student::latest()->get();
        return view('students.index', compact('students'));
    }

    public function create()
    {
        return view('students.create');
    }

    public function store(Request $request)
    {
        $validated = $request->validate([
            'name'  => 'required|string|max:255',
            'email' => 'required|email|unique:students,email',
            'major' => 'required|string|max:255',
        ]);

        Student::create($validated);

        return redirect()->route('students.index')->with('success', 'Data siswa berhasil ditambahkan.');
    }

    public function edit(Student $student)
    {
        return view('students.edit', compact('student'));
    }

    public function update(Request $request, Student $student)
    {
        $validated = $request->validate([
            'name'  => 'required|string|max:255',
            'email' => 'required|email|unique:students,email,' . $student->id,
            'major' => 'required|string|max:255',
        ]);

        $student->update($validated);

        return redirect()->route('students.index')->with('success', 'Data siswa berhasil diperbarui.');
    }

    public function destroy(Student $student)
    {
        $student->delete();

        return redirect()->route('students.index')->with('success', 'Data siswa berhasil dihapus.');
    }
}

6. Konstruksi Antarmuka Tampilan (Blade Views)

Buat folder baru bernama students di dalam rute resources/views/, kemudian susun tiga berkas utama berikut:

A. Tampilan Utama (resources/views/students/index.blade.php)

<a href="{{ route('students.create') }}">Tambah Siswa Baru</a>

@if(session('success'))
    <p style="color: green;">{{ session('success') }}</p>
@endif

<table border="1" cellpadding="8" cellspacing="0">
    <thead>
        <tr>
            <th>Nama</th>
            <th>Email</th>
            <th>Jurusan</th>
            <th>Aksi</th>
        </tr>
    </thead>
    <tbody>
        @foreach($students as $student)
        <tr>
            <td>{{ $student->name }}</td>
            <td>{{ $student->email }}</td>
            <td>{{ $student->major }}</td>
            <td>
                <a href="{{ route('students.edit', $student->id) }}">Edit</a> | 
                <form action="{{ route('students.destroy', $student->id) }}" method="POST" style="display:inline;">
                    @csrf
                    @method('DELETE')
                    <button type="submit" onclick="return confirm('Yakin ingin menghapus?')">Hapus</button>
                </form>
            </td>
        </tr>
        @endforeach
    </tbody>
</table>

B. Formulir Tambah Data (resources/views/students/create.blade.php)

<form action="{{ route('students.store') }}" method="POST">
    @csrf
    <div>
        <label>Nama:</label><br>
        <input type="text" name="name" value="{{ old('name') }}" required>
    </div>
    <div>
        <label>Email:</label><br>
        <input type="email" name="email" value="{{ old('email') }}" required>
    </div>
    <div>
        <label>Jurusan:</label><br>
        <input type="text" name="major" value="{{ old('major') }}" required>
    </div>
    <br>
    <button type="submit">Simpan Data</button>
</form>

C. Formulir Edit Data (resources/views/students/edit.blade.php)

<form action="{{ route('students.update', $student->id) }}" method="POST">
    @csrf
    @method('PUT')
    <div>
        <label>Nama:</label><br>
        <input type="text" name="name" value="{{ $student->name }}" required>
    </div>
    <div>
        <label>Email:</label><br>
        <input type="email" name="email" value="{{ $student->email }}" required>
    </div>
    <div>
        <label>Jurusan:</label><br>
        <input type="text" name="major" value="{{ $student->major }}" required>
    </div>
    <br>
    <button type="submit">Perbarui Data</button>
</form>

Mind Mapping Tahapan Pengembangan Modul Laravel

Berikut adalah peta pikiran (mind mapping) kategoris yang menggambarkan visualisasi alur pengembangan dari tahap persiapan hingga produksi antarmuka:

Kategori Alur Kerja Tahapan & Komponen Kunci
1. Inisialisasi & Siklus Hidup Aplikasi
  • Inisialisasi server local (php artisan serve)
  • Masuk via public/index.php
  • Autoload dependensi composer & pendaftaran service providers
  • Routing halaman awal (routes/web.php → welcome.blade.php)
2. Manajemen Basis Data
  • Konfigurasi kredensial MySQL di berkas .env
  • Generasi berkas migrasi tabel siswa via CLI
  • Penyusunan atribut skema data pada metode up()
  • Eksekusi perintah php artisan migrate
3. Arsitektur Model & Logika Bisnis
  • Proteksi properti mass assignment $fillable pada Student.php
  • Generasi StudentController berbasis opsi --resource
  • Implementasi logika penanganan request HTTP (Validasi, Query, Redirect)
4. Routing RESTful & Views Interface
  • Registrasi rute tunggal Route::resource('students', ...)
  • Penyusunan komponen view utama (index.blade.php)
  • Formulir entri data baru (create.blade.php dengan directive @csrf)
  • Formulir ubah data (edit.blade.php dengan directive @method('PUT'))
Mindmapping Alur Kerja Framework Laravel

Rujukan artikel teknis dan pengenalan alur kerja ini dikompilasi untuk keperluan dokumentasi pengembangan web pada platform Blog Armin.

Diskusi & Komentar