Tutorial Laravel Lengkap
Dari Dasar Framework hingga Membuat Aplikasi CRUD dengan Laravel
Pengenalan Framework & Laravel
Apa itu Framework?
Secara sederhana, framework adalah kumpulan kode program siap pakai dengan aturan penulisan tertentu yang bertujuan untuk memudahkan serta mempercepat pembuatan aplikasi. Lebih spesifik lagi, PHP framework adalah framework yang dibuat menggunakan bahasa pemrograman PHP
Framework menyediakan struktur atau template yang telah dirancang sebelumnya untuk membangun aplikasi, sehingga developer tidak perlu memulai dari nol. Framework berisi kumpulan kode generik, library, API, dan komponen siap pakai yang mempermudah, mempercepat, dan mengorganisir penulisan kode secara sistematis.
Manfaat Menggunakan Framework
Mengapa harus menggunakan framework dalam pengembangan web?
- Hemat Waktu: Framework menyediakan fitur dan fungsi dasar yang sudah terprogram sebelumnya, sehingga tidak perlu menulis kode dari nol
- Kode Terorganisir: Framework menggunakan struktur yang jelas dan sistematis, membuat kode lebih mudah dipahami dan dikelola
- Keamanan Lebih Baik: Framework sudah dilengkapi dengan fitur keamanan yang teruji oleh komunitas developer global
- Skalabilitas: Memudahkan pengembangan aplikasi yang dapat berkembang sesuai kebutuhan bisnis
- Maintenance Mudah: Struktur yang terorganisir membuat aplikasi lebih mudah diperbaiki dan dikembangkan
- Komunitas Besar: Framework populer memiliki dokumentasi lengkap dan komunitas yang aktif membantu
Apa itu Laravel?
Laravel adalah framework PHP open source yang kuat dan mudah dipahami untuk membangun aplikasi web modern.
Laravel diciptakan oleh Taylor Otwell pada tahun 2011 dan kini menjadi salah satu framework PHP paling populer di dunia. Laravel menggunakan pola desain Model-View-Controller (MVC) yang memisahkan logika aplikasi (Model), tampilan (View), dan pengontrol (Controller).
┌─────────────────────────────────────────┐
│ POLA DESAIN MVC LARAVEL │
├─────────────────────────────────────────┤
│ │
│ MODEL (Database & Logic) │
│ ↓ │
│ - Mengelola data dari database │
│ - Berisi logika bisnis aplikasi │
│ - File: app/Models/Student.php │
│ │
│ VIEW (Tampilan HTML) │
│ ↓ │
│ - Menampilkan data ke user │
│ - Berisi HTML, CSS, JavaScript │
│ - File: resources/views/students/ │
│ │
│ CONTROLLER (Pengontrol) │
│ ↓ │
│ - Mengatur alur aplikasi │
│ - Menghubungkan Model dan View │
│ - File: app/Http/Controllers/ │
│ │
└─────────────────────────────────────────┘
Fitur Utama Laravel
Laravel menyediakan berbagai fitur yang mempermudah pengembangan web:
Routing
Sistem routing yang kuat untuk mengarahkan permintaan HTTP dengan mudah ke controller yang sesuai
Eloquent ORM
Sistem untuk berinteraksi dengan database menggunakan model PHP tanpa menulis SQL manual
Blade Template
Engine template untuk membuat view yang dinamis dengan sintaks yang sederhana dan elegan
Migration Database
Sistem kontrol untuk skema database yang memudahkan pengelolaan struktur tabel
Artisan CLI
Command line interface untuk mempercepat development dengan perintah otomatis
Authentication
Sistem autentikasi dan otorisasi yang lengkap untuk keamanan aplikasi
Kelebihan dan Kekurangan Laravel
Kelebihan Laravel:
- Dokumentasi Lengkap: Laravel memiliki dokumentasi yang sangat detail dan mudah dipahami
- Ekosistem Kaya: Banyak package dan library pendukung yang tersedia
- Komunitas Besar: Komunitas Laravel sangat aktif dan siap membantu
- Sintaks Elegan: Kode Laravel mudah dibaca dan ditulis dengan sintaks yang bersih
- Keamanan Terjamin: Built-in protection untuk SQL injection, XSS, dan CSRF
- Testing Support: Dukungan testing yang baik untuk memastikan kualitas aplikasi
Kekurangan Laravel:
- Performa: Untuk aplikasi sederhana, Laravel bisa lebih lambat dibanding native PHP
- Ukuran File: Project Laravel relatif besar karena banyak dependencies
- Kurva Belajar: Pemula butuh waktu untuk memahami konsep MVC dan struktur Laravel
- Update Frequent: Laravel sering update, kadang butuh adaptasi kode lama
Perbandingan: Native PHP vs Laravel
Contoh sederhana koneksi database dan query:
Native PHP (Cara Manual):
<?php
// Koneksi database manual
$host = 'localhost';
$db = 'laravel_siswa';
$user = 'root';
$pass = '';
$conn = new mysqli($host, $user, $pass, $db);
if ($conn->connect_error) {
die("Koneksi gagal: " . $conn->connect_error);
}
// Query manual dengan SQL
$sql = "SELECT * FROM students WHERE kelas = '12 RPL 1'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "Nama: " . $row["nama"] . "<br>";
}
}
$conn->close();
?>
Laravel (Cara Modern):
<?php
// Koneksi otomatis dari .env
// Query menggunakan Eloquent (tidak perlu SQL manual)
$students = Student::where('kelas', '12 RPL 1')->get();
foreach ($students as $student) {
echo "Nama: " . $student->nama . "<br>";
}
// Lebih simpel, aman dari SQL injection, dan mudah dibaca!
?>
Kapan Menggunakan Laravel?
Laravel sangat cocok untuk:
- Aplikasi web dengan database kompleks (sistem sekolah, e-commerce, CRM)
- Project yang butuh pengembangan cepat dengan tim
- Aplikasi yang perlu authentication & authorization
- Website yang akan terus berkembang (scalable)
- API backend untuk aplikasi mobile atau frontend framework
Tidak perlu Laravel jika:
- Website statis sederhana (company profile tanpa database)
- Landing page single page
- Project dengan hosting terbatas (shared hosting murah)
- Aplikasi yang butuh performa maksimal dengan resource minimal
1. Setup XAMPP di Windows
Download dan Install XAMPP
XAMPP adalah paket all-in-one yang berisi Apache, MySQL, PHP, dan Perl.
LANGKAH 1: Download XAMPP
1. Buka https://www.apachefriends.org/
2. Download XAMPP Windows (PHP 8.2+)
3. Jalankan file installer XAMPP
LANGKAH 2: Instalasi
1. Pilih folder instalasi: C:\xampp (default)
2. Pilih komponen: Apache, MySQL, PHP (semuanya)
3. Klik "Next" hingga selesai
4. Jangan install sebagai service
LANGKAH 3: Verifikasi
1. Buka XAMPP Control Panel
2. Klik "Start" untuk Apache
3. Klik "Start" untuk MySQL
4. Tunggu status menjadi "Running" (hijau)
Install Composer
Composer adalah package manager PHP yang diperlukan untuk membuat project Laravel.
LANGKAH 1: Download Installer
1. Buka https://getcomposer.org/download/
2. Download "Composer-Setup.exe"
3. Jalankan file installer
LANGKAH 2: Konfigurasi
1. Saat diminta "php.exe location"
2. Cari & pilih: C:\xampp\php\php.exe
3. Klik "Next" hingga selesai
LANGKAH 3: Verifikasi (Command Prompt Baru)
Buka Command Prompt/PowerShell:
composer --version
Setup Text Editor (VSCode)
Untuk coding, gunakan Visual Studio Code (gratis dan ringan).
LANGKAH 1: Download dan Install
1. Buka https://code.visualstudio.com/
2. Download untuk Windows
3. Jalankan installer, next-next sampai selesai
LANGKAH 2: Install Extensions
1. Buka VSCode
2. Klik "Extensions" (icon kotak di kiri)
3. Cari dan install:
- PHP Intelephense
- Composer
- Thunder Client (untuk testing API)
LANGKAH 3: Setup PHP Path
1. File → Preferences → Settings
2. Cari "php.executablePath"
3. Isi: C:\xampp\php\php.exe
2. Membuat Project Laravel Pertama
Buat Project dengan Composer
Buka Command Prompt atau PowerShell di folder tempat Anda menyimpan project.
composer create-project laravel/laravel student-manager
Proses instalasi:
- Download Laravel dan semua dependencies
- Tunggu 2-3 menit (tergantung kecepatan internet)
- Selesai jika tidak ada error
Masuk ke Folder Project
cd student-manager
Sekarang Command Prompt menunjuk ke folder project
Jalankan Development Server
php artisan serve
Output:
Laravel development server started on http://127.0.0.1:8000/
Buka di browser:
http://localhost:8000/
Memahami Struktur Folder
student-manager/
├── app/
│ ├── Models/ ← Database models
│ └── Http/
│ └── Controllers/ ← Logika aplikasi
├── routes/
│ └── web.php ← Daftar URL aplikasi
├── resources/
│ └── views/ ← File HTML/template
├── database/
│ ├── migrations/ ← Struktur tabel DB
│ └── seeders/ ← Data dummy
├── public/ ← File CSS, JS, images
├── .env ← Konfigurasi database
└── composer.json ← List dependencies
3. Database dan CRUD Siswa
Konfigurasi Database MySQL
Buat database baru di MySQL:
Opsi A: Gunakan phpMyAdmin (Jika XAMPP)
1. Buka http://localhost/phpmyadmin/
2. Login (username: root, password: kosong)
3. Klik "New" di sebelah kiri
4. Buat database baru dengan nama: laravel_siswa
5. Pilih Collation: utf8mb4_unicode_ci
6. Klik "Create"
Opsi B: Gunakan Command Line MySQL
mysql -u root -p
# Ketik password (default kosong untuk XAMPP)
CREATE DATABASE laravel_siswa CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
EXIT;
Konfigurasi Laravel - Edit file .env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_siswa
DB_USERNAME=root
DB_PASSWORD=
Buat Migration (Struktur Tabel)
Migration adalah file untuk mendefinisikan struktur tabel database.
php artisan make:migration create_students_table
Edit file migration yang baru dibuat:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
public function up(): void {
Schema::create('students', function (Blueprint $table) {
$table->id();
$table->string('nama');
$table->string('email')->unique();
$table->string('nomor_induk')->unique();
$table->string('kelas')->nullable();
$table->string('jurusan')->nullable();
$table->text('alamat')->nullable();
$table->string('nomor_telepon')->nullable();
$table->timestamps();
});
}
public function down(): void {
Schema::dropIfExists('students');
}
};
Jalankan Migration
Command ini membuat tabel di database.
php artisan migrate
Buat Model Student
Model adalah class yang menghubungkan database dengan aplikasi.
php artisan make:model Student
Edit file: app/Models/Student.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Student extends Model {
protected $fillable = [
'nama',
'email',
'nomor_induk',
'kelas',
'jurusan',
'alamat',
'nomor_telepon'
];
};
Buat Controller
Controller adalah file yang menangani logika bisnis aplikasi.
php artisan make:controller StudentController
Edit file: app/Http/Controllers/StudentController.php
<?php
namespace App\Http\Controllers;
use App\Models\Student;
use Illuminate\Http\Request;
class StudentController extends Controller {
public function index() {
$students = Student::all();
return view('students.index', compact('students'));
}
public function create() {
return view('students.create');
}
public function store(Request $request) {
$request->validate([
'nama' => 'required|max:255',
'email' => 'required|email|unique:students',
'nomor_induk' => 'required|unique:students'
]);
Student::create($request->all());
return redirect('students')->with('success', 'Siswa ditambahkan!');
}
public function edit(Student $student) {
return view('students.edit', compact('student'));
}
public function update(Request $request, Student $student) {
$request->validate([
'nama' => 'required|max:255',
'email' => 'required|email|unique:students,email,'.$student->id,
'nomor_induk' => 'required|unique:students,nomor_induk,'.$student->id
]);
$student->update($request->all());
return redirect('students')->with('success', 'Siswa diupdate!');
}
public function destroy(Student $student) {
$student->delete();
return redirect('students')->with('success', 'Siswa dihapus!');
}
}
Setup Routes
Edit file: routes/web.php
use App\Http\Controllers\StudentController;
use Illuminate\Support\Facades\Route;
Route::get('/', function () {
return view('welcome');
});
Route::resource('students', StudentController::class);
4. Membuat Views (HTML Template)
Buat Folder dan File View
Buat folder: resources/views/students/
Kemudian buat 3 file di folder tersebut:
- index.blade.php - Tampilkan semua siswa
- create.blade.php - Form tambah siswa
- edit.blade.php - Form edit siswa
Buat View: Daftar Siswa (index)
File: resources/views/students/index.blade.php
<!DOCTYPE html>
<html>
<head>
<title>Daftar Siswa</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container mt-5">
<h2 class="mb-4">Daftar Siswa</h2>
@if(session('success'))
<div class="alert alert-success">{{ session('success') }}</div>
@endif
<a href="/students/create" class="btn btn-primary mb-3">Tambah Siswa</a>
<table class="table table-striped">
<thead>
<tr>
<th>No</th>
<th>Nama</th>
<th>Email</th>
<th>Nomor Induk</th>
<th>Aksi</th>
</tr>
</thead>
<tbody>
@forelse($students as $key => $student)
<tr>
<td>{{ $key + 1 }}</td>
<td>{{ $student->nama }}</td>
<td>{{ $student->email }}</td>
<td>{{ $student->nomor_induk }}</td>
<td>
<a href="/students/{{ $student->id }}/edit" class="btn btn-sm btn-warning">Edit</a>
<form action="/students/{{ $student->id }}" method="POST" style="display:inline;">
@csrf
@method('DELETE')
<button type="submit" class="btn btn-sm btn-danger" onclick="return confirm('Yakin?')">Hapus</button>
</form>
</td>
</tr>
@empty
<tr>
<td colspan="5" class="text-center">Belum ada data siswa</td>
</tr>
@endforelse
</tbody>
</table>
</div>
</body>
</html>
Buat View: Form Tambah Siswa (create)
File: resources/views/students/create.blade.php
<!DOCTYPE html>
<html>
<head>
<title>Tambah Siswa</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container mt-5">
<h2>Tambah Siswa Baru</h2>
<a href="/students" class="btn btn-secondary mb-3">Kembali</a>
<div class="row">
<div class="col-md-6">
<form action="/students" method="POST">
@csrf
<div class="mb-3">
<label>Nama Siswa</label>
<input type="text" class="form-control @error('nama') is-invalid @enderror" name="nama" value="{{ old('nama') }}" required>
@error('nama')<span class="invalid-feedback">{{ $message }}</span>@enderror
</div>
<div class="mb-3">
<label>Email</label>
<input type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required>
@error('email')<span class="invalid-feedback">{{ $message }}</span>@enderror
</div>
<div class="mb-3">
<label>Nomor Induk</label>
<input type="text" class="form-control @error('nomor_induk') is-invalid @enderror" name="nomor_induk" value="{{ old('nomor_induk') }}" required>
@error('nomor_induk')<span class="invalid-feedback">{{ $message }}</span>@enderror
</div>
<div class="mb-3">
<label>Kelas</label>
<input type="text" class="form-control" name="kelas">
</div>
<div class="mb-3">
<label>Jurusan</label>
<input type="text" class="form-control" name="jurusan">
</div>
<div class="mb-3">
<label>Alamat</label>
<textarea class="form-control" name="alamat" rows="3"></textarea>
</div>
<div class="mb-3">
<label>Nomor Telepon</label>
<input type="tel" class="form-control" name="nomor_telepon">
</div>
<button type="submit" class="btn btn-primary">Simpan</button>
<a href="/students" class="btn btn-secondary">Batal</a>
</form>
</div>
</div>
</div>
</body>
</html>
Buat View: Form Edit Siswa (edit)
File: resources/views/students/edit.blade.php
<!DOCTYPE html>
<html>
<head>
<title>Edit Siswa</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container mt-5">
<h2>Edit Siswa: {{ $student->nama }}</h2>
<a href="/students" class="btn btn-secondary mb-3">Kembali</a>
<div class="row">
<div class="col-md-6">
<form action="/students/{{ $student->id }}" method="POST">
@csrf
@method('PUT')
<div class="mb-3">
<label>Nama Siswa</label>
<input type="text" class="form-control @error('nama') is-invalid @enderror" name="nama" value="{{ old('nama', $student->nama) }}" required>
@error('nama')<span class="invalid-feedback">{{ $message }}</span>@enderror
</div>
<div class="mb-3">
<label>Email</label>
<input type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email', $student->email) }}" required>
@error('email')<span class="invalid-feedback">{{ $message }}</span>@enderror
</div>
<div class="mb-3">
<label>Nomor Induk</label>
<input type="text" class="form-control @error('nomor_induk') is-invalid @enderror" name="nomor_induk" value="{{ old('nomor_induk', $student->nomor_induk) }}" required>
@error('nomor_induk')<span class="invalid-feedback">{{ $message }}</span>@enderror
</div>
<div class="mb-3">
<label>Kelas</label>
<input type="text" class="form-control" name="kelas" value="{{ old('kelas', $student->kelas) }}">
</div>
<div class="mb-3">
<label>Jurusan</label>
<input type="text" class="form-control" name="jurusan" value="{{ old('jurusan', $student->jurusan) }}">
</div>
<div class="mb-3">
<label>Alamat</label>
<textarea class="form-control" name="alamat" rows="3">{{ old('alamat', $student->alamat) }}</textarea>
</div>
<div class="mb-3">
<label>Nomor Telepon</label>
<input type="tel" class="form-control" name="nomor_telepon" value="{{ old('nomor_telepon', $student->nomor_telepon) }}">
</div>
<button type="submit" class="btn btn-primary">Update</button>
<a href="/students" class="btn btn-secondary">Batal</a>
</form>
</div>
</div>
</div>
</body>
</html>
5. Testing dan Troubleshooting
Test Aplikasi CRUD
Pastikan semua berjalan dengan baik:
- Jalankan server: php artisan serve
- Buka: http://localhost:8000/students
- Klik "Tambah Siswa"
- Isi form dan klik "Simpan"
- Klik "Edit" untuk mengubah data
- Klik "Hapus" untuk menghapus data
Error dan Solusi Umum
Error: Database connection error
MASALAH: MySQL belum running
SOLUSI:
1. Buka XAMPP Control Panel
2. Klik "Start" untuk MySQL
3. Tunggu status menjadi "Running" (hijau)
4. Refresh halaman aplikasi
Error: No such file or directory
MASALAH: Database belum dibuat
SOLUSI:
1. Buka phpMyAdmin: http://localhost/phpmyadmin/
2. Login: username=root, password=kosong
3. Buat database baru: laravel_siswa
4. Jalankan migration: php artisan migrate
Error: The key APP_KEY is missing
MASALAH: APP_KEY belum di-generate
SOLUSI:
Jalankan command:
php artisan key:generate
Error: CSRF token mismatch
MASALAH: Form tidak punya @csrf
SOLUSI:
Tambahkan @csrf di setiap form:
<form method="POST" action="/...">
@csrf
<!-- input fields -->
</form>
Command Penting Laravel
php artisan serve # Jalankan server
php artisan migrate # Jalankan migration
php artisan migrate:fresh # Reset database
php artisan make:model Name # Buat model
php artisan make:controller NameController # Buat controller
php artisan make:migration create_table # Buat migration
php artisan route:list # Lihat semua route
Langkah Selanjutnya Setelah Kuasai CRUD
Hal-hal yang bisa Anda pelajari:
- Authentication dan Login System
- Database Relationships (One-to-Many, Many-to-Many)
- API Development (JSON Response)
- Form Validation (Advanced)
- File Upload dan Storage
- Send Email (SMTP)
- Testing dan Unit Tests
- Deployment ke Server
Resources Berguna
Link dokumentasi dan tutorial:
Official Laravel Docs:
https://laravel.com/docs
Laracasts (Video Tutorial):
https://laracasts.com
Laravel API Documentation:
https://laravel.com/api
Laravel News:
https://laravel-news.com
Stack Overflow (Q&A):
https://stackoverflow.com (tag: laravel)