HARI 1: Foundation & Installation
Bootcamp Laravel - Sistem Pengelolaan Dokumen (SiDoku)
📋 Informasi Sesi
| Item | Keterangan |
|---|---|
| Hari | 1 dari 5 |
| Durasi | 8 Jam (09:00 - 17:00 WIB) |
| Topik Utama | Foundation & Installation |
| Project | Sistem Pengelolaan Dokumen (SiDoku) |
🎯 Learning Objectives
Setelah menyelesaikan sesi hari ini, peserta akan mampu:
- Memahami apa itu Laravel dan arsitektur MVC
- Menginstal PHP, Composer, dan Laravel di Windows
- Memahami struktur folder project Laravel
- Memahami dasar-dasar PHP (tipe data, variabel, kontrol struktur)
- Memahami konsep OOP di PHP (class, object, inheritance)
- Membuat project Laravel pertama dan menjalankan development server
📚 Prasyarat
Sebelum memulai, pastikan Anda sudah memiliki:
- Laptop/PC dengan Windows 10/11
- RAM minimal 8GB
- Koneksi internet stabil
- Pemahaman operasi dasar komputer
SESI 1: Introduction to Laravel
1.1 Apa itu Laravel?
Laravel adalah framework PHP yang dirancang untuk memudahkan pengembangan aplikasi web. Framework ini diciptakan oleh Taylor Otwell pada tahun 2011 dan hingga kini menjadi framework PHP paling populer di dunia.
Analogi Sederhana
Bayangkan Anda ingin membangun rumah:
| Tanpa Framework | Dengan Framework (Laravel) |
|---|---|
| Membuat batu bata sendiri | Batu bata sudah tersedia |
| Merancang struktur dari nol | Blueprint sudah ada |
| Mengerjakan semua sendiri | Ada panduan dan alat bantu |
| Waktu lama | Waktu lebih singkat |
Kesimpulan: Laravel menyediakan "bahan bangunan" dan "cetak biru" sehingga kita bisa fokus pada fitur aplikasi, bukan membangun fondasi dari nol.
1.2 Mengapa Memilih Laravel?
Keunggulan Laravel:
| No | Keunggulan | Penjelasan |
|---|---|---|
| 1 | Elegant Syntax | Kode mudah dibaca dan ditulis |
| 2 | MVC Architecture | Struktur kode terorganisir |
| 3 | Eloquent ORM | Interaksi database yang mudah |
| 4 | Blade Templating | Template engine yang powerful |
| 5 | Artisan CLI | Command line untuk otomasi |
| 6 | Built-in Security | Keamanan sudah tertanam |
| 7 | Active Community | Komunitas besar dan aktif |
Statistik Laravel (2025-2026):
- #1 Framework PHP paling populer
- 75,000+ stars di GitHub
- Digunakan oleh: BBC, Pfizer, 9GAG, Nintendo
1.3 Arsitektur MVC (Model-View-Controller)
Laravel menggunakan pola arsitektur MVC yang memisahkan aplikasi menjadi 3 komponen:
Penjelasan Komponen:
| Komponen | Lokasi di Laravel | Fungsi |
|---|---|---|
| Model | app/Models/ | Mengelola data dan logika bisnis |
| View | resources/views/ | Menampilkan data ke pengguna (HTML) |
| Controller | app/Http/Controllers/ | Menghubungkan Model dan View |
Contoh Alur MVC:
- User mengakses URL
/dokumen - Router mengarahkan ke
DokumenController - Controller meminta data ke
DokumenModel - Model mengambil data dari database
- Controller mengirim data ke View
- View merender HTML dan menampilkan ke User
1.4 Ekosistem Laravel
Laravel memiliki ekosistem yang lengkap:
| Package | Fungsi |
|---|---|
| Laravel Breeze | Starter kit authentication sederhana |
| Laravel Sanctum | API authentication (SPA, Mobile) |
| Laravel Horizon | Dashboard untuk Redis queues |
| Laravel Forge | Server management & deployment |
Dalam pelatihan ini, kita akan menggunakan: Laravel Breeze untuk authentication.
SESI 2: Persiapan Environment
Pilihan Metode Instalasi
| Opsi | Metode | Kelebihan | Kekurangan |
|---|---|---|---|
| A | Laragon (Recommended) | Sangat mudah, all-in-one | Ukuran besar |
| B | Manual | Kontrol penuh | Lebih rumit |
OPSI A: Instalasi dengan Laragon (Recommended)
Laragon adalah lingkungan development portable untuk Windows yang sudah mencakup PHP, MySQL, Apache, Composer, Git dalam satu paket.
Langkah 1: Download Laragon
- Buka browser dan akses:
https://laragon.org/download/ - Pilih Laragon Full (sekitar 180MB)
- Klik Download dan tunggu selesai
Langkah 2: Install Laragon
- Jalankan installer
laragon-full.exe - Pilih lokasi instalasi (default:
C:\laragon) - Centang opsi:
- Auto virtual hosts
- Add Notepad++ & Terminal
- Klik Install dan tunggu selesai
Langkah 3: Menjalankan Laragon
- Buka Laragon dari Start Menu
- Klik tombol Start All
- Tunggu hingga status hijau (Started)
- Klik Web untuk test
Langkah 4: Verifikasi Instalasi
Buka Terminal di Laragon, lalu ketik:
php -vOutput yang diharapkan:
PHP 8.2.x (cli) (built: ...)Cek Composer:
composer -VOutput:
Composer version 2.x.xLangkah 5: Membuat Project Laravel
- Di Laragon, klik kanan > Quick app > Laravel
- Ketik nama project:
sidoku - Tunggu instalasi selesai
- Akses:
http://sidoku.test
OPSI B: Instalasi Manual
Langkah 1: Download dan Install PHP
- Download dari:
https://windows.php.net/download/ - Pilih PHP 8.2 VS16 x64 Thread Safe (ZIP)
- Extract ke
C:\php - Copy
php.ini-developmentmenjadiphp.ini - Edit
php.ini, uncomment extensions:
extension=curl
extension=fileinfo
extension=mbstring
extension=openssl
extension=pdo_mysql
extension=zip- Set
extension_dir:
extension_dir = "C:\php\ext"Langkah 2: Tambahkan PHP ke PATH
- Buka System Properties > Environment Variables
- Edit Path > Add
C:\php - OK semua dialog
Langkah 3: Verifikasi PHP
php -vLangkah 4: Install Composer
- Download dari:
https://getcomposer.org/download/ - Jalankan Composer-Setup.exe
- Pilih path PHP:
C:\php\php.exe - Selesaikan instalasi
Langkah 5: Install MySQL
- Download dari:
https://dev.mysql.com/downloads/installer/ - Pilih Server only
- Set root password (misal:
root123) - Selesaikan instalasi
Langkah 6: Install VS Code
- Download dari:
https://code.visualstudio.com/ - Install dengan opsi "Add to PATH"
- Install extensions:
- PHP Intelephense
- Laravel Extra Intellisense
- Laravel Blade Snippets
SESI 3: PHP Fundamentals Review
3.1 Variabel dan Tipe Data
Buat file 02-variabel.php:
<?php
// String (teks)
$nama = "Budi Santoso";
$jabatan = 'ASN Golongan III';
// Integer (bilangan bulat)
$umur = 35;
$tahun_masuk = 2020;
// Float (bilangan desimal)
$gaji = 5500000.50;
// Boolean (true/false)
$aktif = true;
$sudah_pensiun = false;
// Null (tidak ada nilai)
$alamat = null;
// Menampilkan variabel
echo "Nama: " . $nama . "<br>";
echo "Jabatan: $jabatan<br>";
echo "Umur: $umur tahun<br>";
echo "Gaji: Rp " . number_format($gaji, 0, ',', '.') . "<br>";
// Cek tipe data
echo "Tipe \$nama: " . gettype($nama) . "<br>";
echo "Tipe \$umur: " . gettype($umur) . "<br>";
?>3.2 Operator
Buat file 03-operator.php:
<?php
// Operator Aritmatika
$a = 10;
$b = 3;
echo "=== Operator Aritmatika ===" . "<br>";
echo "$a + $b = " . ($a + $b) . "<br>";
echo "$a - $b = " . ($a - $b) . "<br>";
echo "$a * $b = " . ($a * $b) . "<br>";
echo "$a / $b = " . ($a / $b) . "<br>";
echo "$a % $b = " . ($a % $b) . "<br>";
// Operator Perbandingan
echo "<br>=== Operator Perbandingan ===" . "<br>";
$x = 5;
$y = "5";
echo "5 == '5': " . ($x == $y ? 'true' : 'false') . "<br>";
echo "5 === '5': " . ($x === $y ? 'true' : 'false') . "<br>";
// Operator Logika
echo "<br>=== Operator Logika ===" . "<br>";
$benar = true;
$salah = false;
echo "true && false: " . ($benar && $salah ? 'true' : 'false') . "<br>";
echo "true || false: " . ($benar || $salah ? 'true' : 'false') . "<br>";
?>3.3 Kondisi (if-else)
Buat file 04-kondisi.php:
<?php
$nilai = 75;
$absensi = 90;
echo "Nilai: $nilai<br>";
echo "Absensi: $absensi%<br><br>";
// If-else
if ($nilai >= 80) {
$grade = "A";
} elseif ($nilai >= 70) {
$grade = "B";
} elseif ($nilai >= 60) {
$grade = "C";
} else {
$grade = "D";
}
echo "Grade: $grade<br>";
// Kondisi gabungan
if ($nilai >= 60 && $absensi >= 80) {
echo "Status: LULUS<br>";
} else {
echo "Status: TIDAK LULUS<br>";
}
// Ternary operator
$status = ($nilai >= 60) ? "Kompeten" : "Belum Kompeten";
echo "Kompetensi: $status<br>";
// Null coalescing
$nama = null;
$display = $nama ?? "Pengguna";
echo "Nama: $display<br>";
?>3.4 Perulangan (Loop)
Buat file 05-loop.php:
<?php
echo "=== For Loop ===" . "<br>";
for ($i = 1; $i <= 5; $i++) {
echo "Angka ke-$i<br>";
}
echo "<br>=== While Loop ===" . "<br>";
$counter = 5;
while ($counter > 0) {
echo "Countdown: $counter<br>";
$counter--;
}
echo "<br>=== Foreach Loop ===" . "<br>";
$buah = ["Apel", "Jeruk", "Mangga"];
foreach ($buah as $item) {
echo "- $item<br>";
}
echo "<br>=== Foreach dengan Key ===" . "<br>";
$pegawai = [
"nip" => "198501012010011001",
"nama" => "Ahmad Sudirman",
"golongan" => "III/b"
];
foreach ($pegawai as $key => $value) {
echo "$key: $value<br>";
}
?>3.5 Function
Buat file 06-function.php:
<?php
// Function tanpa parameter
function salam() {
return "Selamat Datang di SiDoku!";
}
echo salam() . "<br><br>";
// Function dengan parameter
function hitungGaji($pokok, $tunjangan) {
return $pokok + $tunjangan;
}
$total = hitungGaji(5000000, 1500000);
echo "Total Gaji: Rp " . number_format($total, 0, ',', '.') . "<br><br>";
// Function dengan default parameter
function formatTanggal($tanggal, $format = "d/m/Y") {
return date($format, strtotime($tanggal));
}
echo "Tanggal: " . formatTanggal("2025-06-15") . "<br>";
// Arrow function (PHP 7.4+)
$kuadrat = fn($n) => $n * $n;
echo "5 kuadrat = " . $kuadrat(5) . "<br>";
?>3.6 Array
Buat file 07-array.php:
<?php
// Array Indexed
$hari = ["Senin", "Selasa", "Rabu", "Kamis", "Jumat"];
echo "Hari pertama: " . $hari[0] . "<br>";
echo "Jumlah hari: " . count($hari) . "<br><br>";
// Array Associative
$dokumen = [
"id" => 1,
"judul" => "Surat Keputusan Mutasi",
"nomor" => "SK/001/2025",
"status" => "Aktif"
];
echo "Judul: " . $dokumen["judul"] . "<br>";
echo "Nomor: " . $dokumen["nomor"] . "<br><br>";
// Array Multidimensional
$pegawai_list = [
["nip" => "198501012010011001", "nama" => "Ahmad", "jabatan" => "Kasie"],
["nip" => "199002152015012002", "nama" => "Siti", "jabatan" => "Staf"],
];
echo "<table border='1'>";
echo "<tr><th>NIP</th><th>Nama</th><th>Jabatan</th></tr>";
foreach ($pegawai_list as $pegawai) {
echo "<tr>";
echo "<td>" . $pegawai["nip"] . "</td>";
echo "<td>" . $pegawai["nama"] . "</td>";
echo "<td>" . $pegawai["jabatan"] . "</td>";
echo "</tr>";
}
echo "</table>";
// Fungsi Array
$angka = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
$genap = array_filter($angka, fn($n) => $n % 2 == 0);
echo "<br>Angka genap: ";
print_r($genap);
?>SESI 4: PHP OOP Basics
4.1 Class dan Object
Buat file 08-class.php:
<?php
class Dokumen {
// Properties
public $judul;
public $nomor;
public $tanggal;
public $status;
// Constructor
public function __construct($judul, $nomor, $tanggal) {
$this->judul = $judul;
$this->nomor = $nomor;
$this->tanggal = $tanggal;
$this->status = "Draft";
}
// Methods
public function tampilkanInfo() {
return "[$this->nomor] $this->judul - Status: $this->status";
}
public function setujui() {
$this->status = "Disetujui";
return "Dokumen berhasil disetujui!";
}
public function tolak($alasan) {
$this->status = "Ditolak";
return "Dokumen ditolak. Alasan: $alasan";
}
}
// Membuat Object
$dok1 = new Dokumen("Surat Keputusan Mutasi", "SK/001/2025", "2025-06-15");
$dok2 = new Dokumen("Nota Dinas Rapat", "ND/015/2025", "2025-06-20");
echo "=== Dokumen 1 ===" . "<br>";
echo $dok1->tampilkanInfo() . "<br>";
echo $dok1->setujui() . "<br>";
echo $dok1->tampilkanInfo() . "<br><br>";
echo "=== Dokumen 2 ===" . "<br>";
echo $dok2->tampilkanInfo() . "<br>";
echo $dok2->tolak("Format tidak sesuai") . "<br>";
echo $dok2->tampilkanInfo() . "<br>";
?>4.2 Visibility
Buat file 09-visibility.php:
<?php
class Pegawai {
public $nama; // Bisa diakses dari mana saja
protected $nip; // Hanya class ini dan turunannya
private $gaji; // Hanya class ini saja
public function __construct($nama, $nip, $gaji) {
$this->nama = $nama;
$this->nip = $nip;
$this->gaji = $gaji;
}
// Getter untuk private property
public function getGaji() {
return $this->gaji;
}
// Setter dengan validasi
public function setGaji($gaji) {
if ($gaji < 0) {
throw new Exception("Gaji tidak boleh negatif!");
}
$this->gaji = $gaji;
}
public function getGajiFormatted() {
return "Rp " . number_format($this->gaji, 0, ',', '.');
}
}
$pegawai = new Pegawai("Ahmad", "198501012010011001", 7500000);
echo "Nama: " . $pegawai->nama . "<br>";
echo "Gaji: " . $pegawai->getGajiFormatted() . "<br>";
$pegawai->setGaji(8000000);
echo "Gaji baru: " . $pegawai->getGajiFormatted() . "<br>";
?>4.3 Inheritance
Buat file 10-inheritance.php:
<?php
// Parent Class
class Kendaraan {
protected $merk;
protected $tahun;
public function __construct($merk, $tahun) {
$this->merk = $merk;
$this->tahun = $tahun;
}
public function getInfo() {
return "$this->merk ($this->tahun)";
}
public function start() {
return "Kendaraan dinyalakan";
}
}
// Child Class
class Mobil extends Kendaraan {
private $pintu;
public function __construct($merk, $tahun, $pintu) {
parent::__construct($merk, $tahun);
$this->pintu = $pintu;
}
public function getInfo() {
return parent::getInfo() . " - $this->pintu pintu";
}
public function bukaAC() {
return "AC dinyalakan";
}
}
$mobil = new Mobil("Toyota Camry", 2024, 4);
echo $mobil->getInfo() . "<br>";
echo $mobil->start() . "<br>";
echo $mobil->bukaAC() . "<br>";
?>PRAKTIKUM: Setup Project SiDoku
Langkah 1: Buat Database
Via Laragon HeidiSQL:
- Klik kanan Laragon > MySQL > HeidiSQL
- Klik kanan > Create new > Database
- Nama:
sidoku
Via Command Line:
mysql -u root -p
CREATE DATABASE sidoku CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
exitLangkah 2: Buat Project Laravel
Laragon:
- Quick app > Laravel >
sidoku
Manual:
cd C:\laragon\www
composer create-project laravel/laravel sidokuLangkah 3: Buka di VS Code
cd sidoku
code .Langkah 4: Konfigurasi .env
Edit file .env:
APP_NAME=SiDoku
APP_URL=http://sidoku.test
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=sidoku
DB_USERNAME=root
DB_PASSWORD=Langkah 5: Test Migrasi
php artisan migrateLangkah 6: Jalankan Server
php artisan serveAkses: http://127.0.0.1:8000 atau http://sidoku.test
Struktur Folder Laravel
sidoku/
|-- app/
| |-- Http/Controllers/ <- Controller
| |-- Models/ <- Model Eloquent
|-- config/ <- Konfigurasi
|-- database/
| |-- migrations/ <- Migrasi database
| |-- seeders/ <- Data dummy
|-- public/ <- File publik
|-- resources/views/ <- Blade templates
|-- routes/
| |-- web.php <- Route web
| |-- api.php <- Route API
|-- .env <- Environment config✅ Checkpoint Hari 1
Pastikan Anda sudah bisa:
- Menjalankan
php -vdancomposer -V - Mengakses project Laravel di browser
- Menjalankan
php artisan migratetanpa error - Memahami dasar PHP dan OOP
Selamat! Anda siap untuk Hari 2: Routing, Controllers, dan Views!