Menguasai Laravel + Livewire dalam 14 Hari
Panduan belajar terstruktur dari nol โ mulai dari memasang tools, memahami dasar Laravel, membangun aplikasi interaktif dengan Livewire, sampai men-deploy ke server production lewat GitHub. Dibuat khusus untuk tim IT yang ingin cepat produktif.
Selamat Datang ๐
Knowledge base ini dirancang sebagai peta jalan (roadmap) belajar. Anggap saja seperti resep masakan: setiap hari punya bahan (materi) dan langkah (praktik) yang jelas. Kalau diikuti berurutan, dalam 14 hari Anda sudah bisa membuat aplikasi web interaktif sendiri dan menaikkannya ke internet.
Apa itu Laravel & Livewire? (analogi dulu)
Laravel itu seperti dapur restoran lengkap: sudah ada kompor, kulkas, alat masak, semua tertata. Anda tinggal masak (bikin fitur) tanpa harus membangun dapur dari nol. Ia adalah framework PHP paling populer untuk membuat aplikasi web.
Livewire itu seperti pelayan ajaib yang membuat halaman web Anda interaktif tanpa perlu menulis JavaScript rumit. Biasanya, kalau mau tombol "like" bertambah tanpa reload halaman, Anda harus belajar JavaScript/React. Dengan Livewire, Anda cukup menulis PHP โ Livewire yang mengurus komunikasi diam-diam ke server. Cocok banget buat programmer yang sudah nyaman dengan PHP tapi ingin UI modern.
Versi & Ekosistem (Divalidasi Agustus 2026)
Sebelum mulai, penting tahu versi yang dipakai supaya tidak bingung saat mengikuti tutorial. Berikut versi terbaru yang sudah kami verifikasi langsung dari sumber resmi (Packagist) per 20 Agustus 2026:
| Teknologi | Versi Stabil | Catatan |
|---|---|---|
| Laravel | 12.x (13.x sudah rilis) | Butuh PHP 8.2+. Untuk belajar, Laravel 12 paling banyak referensinya. |
| Livewire | 3.7+ (4.x baru rilis) | Mayoritas tutorial masih Livewire 3 โ kita pakai ini sebagai dasar. Livewire 4 pendatang baru. |
| PHP | 8.2 โ 8.4 | Minimum 8.2 untuk Laravel 12. Pakai versi terbaru yang stabil. |
| Tailwind CSS | 4.x | Sudah terpasang default di project Laravel baru. |
| Alpine.js | 3.x | Sudah dibundel otomatis oleh Livewire, tidak perlu install manual. |
| Flux UI | 2.17 | UI kit resmi Livewire. Ada versi gratis & Pro. |
Persiapan Tools (Hari ke-0)
Sebelum Day 1, pasang dulu semua "peralatan dapur". Lakukan sekali saja di awal.
Yang perlu dipasang
- PHP 8.2+ โ bahasa pemrogramannya
- Composer โ manajer paket PHP (seperti "app store" untuk library PHP)
- Node.js + npm โ untuk membangun aset frontend (CSS/JS)
- MySQL atau SQLite โ tempat menyimpan data
- Git โ pencatat riwayat kode & jembatan ke GitHub
- VS Code โ editor kode (gratis, paling populer)
Cara tercepat di Windows: Laravel Herd
Laravel Herd adalah aplikasi gratis yang memasang PHP, Composer, dan Nginx sekaligus dalam satu klik. Sangat direkomendasikan untuk pemula Windows/Mac supaya tidak pusing setup manual.
# Cek semua tool sudah terpasang
php --version # harus 8.2+
composer --version
node --version
npm --version
git --version
Fondasi PHP & Struktur Laravel
Tujuan: paham struktur folder Laravel dan bikin project pertama.
Sub-topik
- Refresh PHP: variabel, array, function, class/OOP dasar
- Membuat project Laravel baru
- Mengenal folder penting:
routes/,app/,resources/views/,public/,.env - Menjalankan server development
# Cara resmi terbaru (butuh Laravel installer)
composer global require laravel/installer
laravel new belajar-app
# Atau langsung via composer
composer create-project laravel/laravel belajar-app
cd belajar-app
php artisan serve # buka http://127.0.0.1:8000
routes/web.php = daftar alamat/menu. app/Http/Controllers = juru masak. resources/views = piring penyajian (HTML). .env = buku rahasia (password DB, dll โ jangan pernah di-upload ke GitHub!).Routing & Controller
Tujuan: paham bagaimana URL diproses jadi respon.
Sub-topik
- Route: GET, POST, parameter, named route
- Controller: memisahkan logika dari route
- Request & Response, redirect
use App\Http\Controllers\SiswaController;
Route::get('/', fn() => view('welcome'));
// Route dengan parameter
Route::get('/siswa/{id}', [SiswaController::class, 'show']);
// Named route โ memudahkan bikin link
Route::get('/dashboard', [DashboardController::class, 'index'])
->name('dashboard');
php artisan make:controller SiswaController
class SiswaController extends Controller {
public function show($id) {
return view('siswa.show', ['id' => $id]);
}
}
Blade Templating
Tujuan: bikin tampilan yang bisa menampilkan data & dipakai ulang.
Sub-topik
- Sintaks Blade:
{{ }},@if,@foreach - Layout &
@extends,@section,@yield - Components &
@include
@extends('layouts.app')
@section('content')
<h1>Daftar Siswa</h1>
@if($siswa->isEmpty())
<p>Belum ada data.</p>
@else
<ul>
@foreach($siswa as $s)
<li>{{ $s->nama }}</li>
@endforeach
</ul>
@endif
@endsection
{{ }}.Database & Migration
Tujuan: bikin & kelola struktur tabel lewat kode (bukan klik-klik di phpMyAdmin).
Sub-topik
- Konfigurasi
.envuntuk database - Migration: bikin tabel via kode
- Seeder & Factory: mengisi data contoh
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=belajar_app
DB_USERNAME=root
DB_PASSWORD=
php artisan make:migration create_siswa_table
php artisan migrate
Schema::create('siswa', function (Blueprint $table) {
$table->id();
$table->string('nama');
$table->string('nis')->unique();
$table->string('kelas')->nullable();
$table->timestamps();
});
Eloquent ORM
Tujuan: CRUD (Create, Read, Update, Delete) data tanpa nulis SQL mentah.
Sub-topik
- Model & konsep ORM
- Query dasar:
all(),find(),where(),create() - Mass assignment &
$fillable
php artisan make:model Siswa -m
class Siswa extends Model {
protected $fillable = ['nama', 'nis', 'kelas'];
}
// Create
Siswa::create(['nama' => 'Budi', 'nis' => '2024001']);
// Read
$semua = Siswa::all();
$satu = Siswa::find(1);
$kelas7 = Siswa::where('kelas', '7')->get();
// Update
$satu->update(['kelas' => '8']);
// Delete
$satu->delete();
$fillable โ muncul error "MassAssignmentException". Isi kolom apa saja yang boleh diisi massal di sini.Relationships & Form Handling
Tujuan: paham relasi antar tabel & menyimpan data dari form.
Sub-topik
- Relasi:
hasMany,belongsTo,belongsToMany - Form + CSRF protection
- Validasi request dasar
// app/Models/Kelas.php
public function siswa() {
return $this->hasMany(Siswa::class);
}
// app/Models/Siswa.php
public function kelas() {
return $this->belongsTo(Kelas::class);
}
// Pakai: ambil semua siswa dari kelas tertentu
$kelas->siswa; // otomatis join
Kelas::with('siswa')->get() supaya query efisien saat menampilkan banyak data relasi.Livewire: Konsep Dasar ๐
Tujuan: paham apa itu komponen Livewire & bikin yang pertama. Ini titik balik roadmap!
Sub-topik
- Install Livewire 3
- Anatomi komponen: class PHP + view Blade
- Property publik & auto-render
composer require livewire/livewire
# Bikin komponen pertama
php artisan make:livewire Counter
Perintah di atas membuat 2 file: app/Livewire/Counter.php (otak) dan resources/views/livewire/counter.blade.php (wajah).
use Livewire\Component;
class Counter extends Component {
public $count = 0;
public function increment() { $this->count++; }
public function decrement() { $this->count--; }
public function render() {
return view('livewire.counter');
}
}
<div style="text-align:center">
<button wire:click="decrement">-</button>
<h1>{{ $count }}</h1>
<button wire:click="increment">+</button>
</div>
wire:click memanggil method PHP, Livewire mengurus sisanya.Data Binding & Actions
Tujuan: menghubungkan input form ke property secara otomatis.
Sub-topik
wire:modelโ two-way bindingwire:model.livevs.blurvs default (defer)- Actions dengan parameter
// Component
public $search = '';
public function render() {
return view('livewire.cari-siswa', [
'hasil' => Siswa::where('nama', 'like', "%{$this->search}%")->get(),
]);
}
<input type="text" wire:model.live="search" placeholder="Cari nama...">
<ul>
@foreach($hasil as $s)
<li>{{ $s->nama }}</li>
@endforeach
</ul>
wire:model update tiap ketikan (live). Di Livewire 3, default-nya "deferred" (update saat submit/aksi). Kalau mau live tiap ketik, wajib tulis wire:model.live. Ini pitfall yang paling sering bikin bingung!Modifier binding
| Modifier | Kapan update ke server |
|---|---|
wire:model | Saat ada aksi (default, hemat request) |
wire:model.live | Setiap ketikan (real-time) |
wire:model.blur | Saat keluar dari input |
wire:model.live.debounce.500ms | Real-time tapi tunggu jeda 0.5 detik |
Validasi & Lifecycle Hooks
Tujuan: memvalidasi input & paham kapan kode dijalankan.
Sub-topik
- Validasi dengan atribut
#[Validate] - Menampilkan pesan error
- Lifecycle hooks:
mount(),updated(),hydrate()
use Livewire\Attributes\Validate;
class TambahSiswa extends Component {
#[Validate('required|min:3')]
public $nama = '';
#[Validate('required|unique:siswa,nis')]
public $nis = '';
public function simpan() {
$this->validate();
Siswa::create(['nama' => $this->nama, 'nis' => $this->nis]);
session()->flash('sukses', 'Siswa tersimpan!');
$this->reset();
}
}
<form wire:submit="simpan">
<input wire:model="nama">
@error('nama') <span class="err">{{ $message }}</span> @enderror
<button type="submit">Simpan</button>
</form>
updated() jalan tiap property berubah โ cocok untuk reset halaman saat pencarian berubah.Livewire Lanjutan
Tujuan: pagination, loading state, event antar komponen.
Sub-topik
- Pagination bawaan Livewire (
WithPagination) - Loading state:
wire:loading - Events:
dispatch()& listeners antar komponen - Flash message & konfirmasi hapus
use Livewire\WithPagination;
class DaftarSiswa extends Component {
use WithPagination;
public function render() {
return view('livewire.daftar', [
'siswa' => Siswa::paginate(10),
]);
}
}
<!-- Muncul otomatis saat request berjalan -->
<div wire:loading>Memuat...</div>
{{ $siswa->links() }} <!-- tombol pagination -->
$this->dispatch('siswa-ditambah') di satu komponen, lalu #[On('siswa-ditambah')] di komponen lain untuk auto-refresh daftar. Ini cara komponen "ngobrol".Form Object & File Upload
Tujuan: merapikan form kompleks & menangani upload foto.
Sub-topik
- Form Objects โ memisahkan logika form (fitur Livewire 3)
- File upload dengan
WithFileUploads - Preview & validasi file
use Livewire\WithFileUploads;
class UploadFoto extends Component {
use WithFileUploads;
#[Validate('image|max:1024')] // max 1MB
public $foto;
public function simpan() {
$path = $this->foto->store('foto-siswa', 'public');
// simpan $path ke database
}
}
php artisan storage:link supaya file yang di-upload bisa diakses publik dari browser.Autentikasi & Starter Kit
Tujuan: menambahkan sistem login siap-pakai.
Sub-topik
- Laravel Starter Kit (berbasis Livewire + Volt)
- Middleware
authuntuk proteksi route - Cek user login:
auth()->user()
# Saat bikin project baru, pilih starter kit Livewire
laravel new app-sekolah
# Pilih: Livewire starter kit โ sudah termasuk
# login, register, profile, dashboard
npm install && npm run build
php artisan migrate
Route::get('/dashboard', Dashboard::class)
->middleware('auth');
UI Library: FLUX & TallStackUI
Tujuan: memakai komponen UI siap-pakai (tombol, modal, dropdown) supaya tampilan profesional cepat. Detail lengkap ada di section FLUX vs TallStackUI di bawah.
composer require livewire/flux
<flux:button variant="primary" wire:click="simpan">Simpan</flux:button>
<flux:input wire:model="nama" label="Nama Siswa" />
<flux:badge color="green">Aktif</flux:badge>
Deployment ๐
Tujuan: app Anda bisa diakses siapa saja lewat domain. Detail langkah & GitHub ada di section GitHub & Deployment.
Ringkasan alur deployment
- Push kode ke GitHub (jangan sertakan
.env!) - Siapkan server (VPS: DigitalOcean, Contabo, atau layanan seperti Laravel Forge / Ploi)
- Clone repo di server
- Set environment production (
.env,APP_ENV=production) - Optimasi: cache config, route, view, build aset
- Set web server (Nginx) mengarah ke folder
public/
composer install --optimize-autoloader --no-dev
php artisan migrate --force
php artisan config:cache
php artisan route:cache
php artisan view:cache
npm ci && npm run build
APP_DEBUG=false di .env production. Kalau true, pesan error bisa membocorkan password database ke publik!laravel new sampai aplikasi live di internet. Sisanya tinggal jam terbang โ bikin project nyata sebanyak mungkin.FLUX vs TallStackUI โ Pilih Mana?
Dua-duanya adalah kumpulan komponen UI siap-pakai (tombol, modal, tabel, dropdown, dll) untuk Livewire, supaya Anda tidak perlu styling dari nol. Berikut perbandingan yang sudah diverifikasi dari situs resmi (Agustus 2026):
| Aspek | Flux UI | TallStackUI |
|---|---|---|
| Posisi | UI kit resmi Livewire (dibuat Caleb Porzio, pencipta Livewire) | Library komunitas, open-source penuh |
| Harga | Free (komponen inti) + Pro berbayar (lisensi sekali bayar) | Gratis 100% โ semua komponen |
| Versi | 2.17 ยท butuh Livewire 3.7+ / 4, PHP 8.1+ | Butuh Livewire 3, Tailwind, Alpine.js |
| Styling | Tailwind CSS, desain sangat rapi & konsisten | Tailwind CSS, banyak varian & opsi |
| Kelebihan | Integrasi paling mulus, kualitas premium, didukung tim Livewire resmi | Gratis penuh, komponen sangat lengkap (toast, dialog, table, dll) |
| Kekurangan | Komponen tercanggih ada di versi Pro (berbayar) | Komunitas lebih kecil dari Flux |
Contoh perbandingan kode
<flux:input wire:model="nama" label="Nama" placeholder="Masukkan nama" />
<flux:button variant="primary">Simpan</flux:button>
<flux:badge color="green">Lunas</flux:badge>
<x-input wire:model="nama" label="Nama" placeholder="Masukkan nama" />
<x-button color="primary">Simpan</x-button>
<x-badge text="Lunas" color="green" />
GitHub & Proses Deployment (Detail)
Bagian ini menjelaskan cara menyimpan kode di GitHub dan menaikkannya ke server โ materi inti Day 14.
1. Menyiapkan Git & GitHub
git init
git add .
git commit -m "Initial commit"
# Buat repo kosong di github.com dulu, lalu:
git remote add origin git@github.com:username/app-sekolah.git
git branch -M main
git push -u origin main
.env ada di .gitignore (defaultnya sudah). File ini berisi password database & kunci rahasia โ jangan pernah ter-upload ke GitHub. Yang di-commit hanya .env.example (template kosong).2. Branch Strategy (kerja tim)
mainโ kode production (yang live), selalu stabildevelopmentโ kode yang sedang dikembangkan- Fitur baru โ bikin branch sendiri โ Pull Request โ review โ merge
3. Auto-Deploy dengan GitHub Actions
GitHub Actions bisa otomatis men-deploy setiap kali Anda push ke main. Contoh workflow sederhana (deploy via SSH ke VPS):
name: Deploy
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Deploy via SSH
uses: appleboy/ssh-action@v1.0.0
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USER }}
key: ${{ secrets.SSH_KEY }}
script: |
cd /var/www/app-sekolah
git pull origin main
composer install --no-dev --optimize-autoloader
php artisan migrate --force
php artisan config:cache
php artisan route:cache
php artisan view:cache
npm ci && npm run build
4. Cara termudah: Laravel Cloud / Forge / Ploi
Kalau tidak mau ribet setup server manual, gunakan layanan managed:
- Laravel Cloud โ platform resmi Laravel, deploy langsung dari GitHub dengan beberapa klik
- Laravel Forge โ provisioning server + auto-deploy dari GitHub
- Ploi.io โ alternatif Forge, ada paket gratis
Kumpulan Video & Sumber Belajar
Semua link di bawah sudah diverifikasi aktif (Agustus 2026). Dahulukan yang berbahasa Indonesia jika baru mulai.
๐ฎ๐ฉ Bahasa Indonesia
| Channel/Sumber | Materi | Link |
|---|---|---|
| Web Programming UNPAS (Sandhika Galih) | Laravel dasar sampai mahir, paling ramah pemula | @sandhikagalih |
| Programmer Zaman Now (Eko Kurniawan) | Laravel & PHP mendalam, teori kuat | @ProgrammerZamanNow |
๐ Internasional (Bahasa Inggris)
| Sumber | Materi | Link |
|---|---|---|
| Laravel Bootcamp (resmi) | Bikin app dari nol, gratis | bootcamp.laravel.com |
| Laracasts | Video premium, kualitas terbaik (Livewire 3 From Scratch) | laracasts.com |
| Laravel Daily | Tips praktis & studi kasus nyata | @LaravelDaily |
๐ Dokumentasi Resmi (WAJIB dibookmark)
- laravel.com/docs โ dokumentasi Laravel
- livewire.laravel.com/docs โ dokumentasi Livewire
- fluxui.dev โ Flux UI
- tallstackui.com โ TallStackUI
Cheat Sheet โ Perintah Artisan Sering Dipakai
# Project & server
laravel new nama-app
php artisan serve
# Generator
php artisan make:model Nama -mc # model + migration + controller
php artisan make:livewire NamaKomponen
php artisan make:migration create_xxx_table
# Database
php artisan migrate # jalankan migration
php artisan migrate:fresh --seed # reset + isi data contoh
php artisan db:seed
# Utilitas
php artisan storage:link # link folder upload
php artisan tinker # REPL uji coba kode
php artisan route:list # lihat semua route
# Production
php artisan config:cache
php artisan route:cache
php artisan optimize:clear # bersihkan semua cache
Checklist Kemajuan Belajar
| Milestone | Bisa dianggap kuasai jika... |
|---|---|
| Minggu 1 (Day 1-7) | Bisa bikin CRUD Laravel + komponen Livewire pertama jalan |
| Minggu 2 (Day 8-14) | Bisa bikin form validasi, upload file, login, dan deploy ke server |
| Setelah 14 hari | Bikin 1 project nyata (misal: aplikasi data siswa/inventaris) end-to-end |