Skip to content

HARI 1: Foundation & Installation

Bootcamp Laravel - Sistem Pengelolaan Dokumen (SiDoku)


📋 Informasi Sesi

ItemKeterangan
Hari1 dari 5
Durasi8 Jam (09:00 - 17:00 WIB)
Topik UtamaFoundation & Installation
ProjectSistem Pengelolaan Dokumen (SiDoku)

🎯 Learning Objectives

Setelah menyelesaikan sesi hari ini, peserta akan mampu:

  1. Memahami apa itu Laravel dan arsitektur MVC
  2. Menginstal PHP, Composer, dan Laravel di Windows
  3. Memahami struktur folder project Laravel
  4. Memahami dasar-dasar PHP (tipe data, variabel, kontrol struktur)
  5. Memahami konsep OOP di PHP (class, object, inheritance)
  6. 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 FrameworkDengan Framework (Laravel)
Membuat batu bata sendiriBatu bata sudah tersedia
Merancang struktur dari nolBlueprint sudah ada
Mengerjakan semua sendiriAda panduan dan alat bantu
Waktu lamaWaktu 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:

NoKeunggulanPenjelasan
1Elegant SyntaxKode mudah dibaca dan ditulis
2MVC ArchitectureStruktur kode terorganisir
3Eloquent ORMInteraksi database yang mudah
4Blade TemplatingTemplate engine yang powerful
5Artisan CLICommand line untuk otomasi
6Built-in SecurityKeamanan sudah tertanam
7Active CommunityKomunitas 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:

KomponenLokasi di LaravelFungsi
Modelapp/Models/Mengelola data dan logika bisnis
Viewresources/views/Menampilkan data ke pengguna (HTML)
Controllerapp/Http/Controllers/Menghubungkan Model dan View

Contoh Alur MVC:

  1. User mengakses URL /dokumen
  2. Router mengarahkan ke DokumenController
  3. Controller meminta data ke Dokumen Model
  4. Model mengambil data dari database
  5. Controller mengirim data ke View
  6. View merender HTML dan menampilkan ke User

1.4 Ekosistem Laravel

Laravel memiliki ekosistem yang lengkap:

PackageFungsi
Laravel BreezeStarter kit authentication sederhana
Laravel SanctumAPI authentication (SPA, Mobile)
Laravel HorizonDashboard untuk Redis queues
Laravel ForgeServer management & deployment

Dalam pelatihan ini, kita akan menggunakan: Laravel Breeze untuk authentication.


SESI 2: Persiapan Environment


Pilihan Metode Instalasi

OpsiMetodeKelebihanKekurangan
ALaragon (Recommended)Sangat mudah, all-in-oneUkuran besar
BManualKontrol penuhLebih rumit

Laragon adalah lingkungan development portable untuk Windows yang sudah mencakup PHP, MySQL, Apache, Composer, Git dalam satu paket.

Langkah 1: Download Laragon

  1. Buka browser dan akses: https://laragon.org/download/
  2. Pilih Laragon Full (sekitar 180MB)
  3. Klik Download dan tunggu selesai

Langkah 2: Install Laragon

  1. Jalankan installer laragon-full.exe
  2. Pilih lokasi instalasi (default: C:\laragon)
  3. Centang opsi:
    • Auto virtual hosts
    • Add Notepad++ & Terminal
  4. Klik Install dan tunggu selesai

Langkah 3: Menjalankan Laragon

  1. Buka Laragon dari Start Menu
  2. Klik tombol Start All
  3. Tunggu hingga status hijau (Started)
  4. Klik Web untuk test

Langkah 4: Verifikasi Instalasi

Buka Terminal di Laragon, lalu ketik:

bash
php -v

Output yang diharapkan:

PHP 8.2.x (cli) (built: ...)

Cek Composer:

bash
composer -V

Output:

Composer version 2.x.x

Langkah 5: Membuat Project Laravel

  1. Di Laragon, klik kanan > Quick app > Laravel
  2. Ketik nama project: sidoku
  3. Tunggu instalasi selesai
  4. Akses: http://sidoku.test

OPSI B: Instalasi Manual

Langkah 1: Download dan Install PHP

  1. Download dari: https://windows.php.net/download/
  2. Pilih PHP 8.2 VS16 x64 Thread Safe (ZIP)
  3. Extract ke C:\php
  4. Copy php.ini-development menjadi php.ini
  5. Edit php.ini, uncomment extensions:
ini
extension=curl
extension=fileinfo
extension=mbstring
extension=openssl
extension=pdo_mysql
extension=zip
  1. Set extension_dir:
ini
extension_dir = "C:\php\ext"

Langkah 2: Tambahkan PHP ke PATH

  1. Buka System Properties > Environment Variables
  2. Edit Path > Add C:\php
  3. OK semua dialog

Langkah 3: Verifikasi PHP

bash
php -v

Langkah 4: Install Composer

  1. Download dari: https://getcomposer.org/download/
  2. Jalankan Composer-Setup.exe
  3. Pilih path PHP: C:\php\php.exe
  4. Selesaikan instalasi

Langkah 5: Install MySQL

  1. Download dari: https://dev.mysql.com/downloads/installer/
  2. Pilih Server only
  3. Set root password (misal: root123)
  4. Selesaikan instalasi

Langkah 6: Install VS Code

  1. Download dari: https://code.visualstudio.com/
  2. Install dengan opsi "Add to PATH"
  3. 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
<?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
<?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
<?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
<?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
<?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
<?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
<?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
<?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
<?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:

  1. Klik kanan Laragon > MySQL > HeidiSQL
  2. Klik kanan > Create new > Database
  3. Nama: sidoku

Via Command Line:

sql
mysql -u root -p
CREATE DATABASE sidoku CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
exit

Langkah 2: Buat Project Laravel

Laragon:

  • Quick app > Laravel > sidoku

Manual:

bash
cd C:\laragon\www
composer create-project laravel/laravel sidoku

Langkah 3: Buka di VS Code

bash
cd sidoku
code .

Langkah 4: Konfigurasi .env

Edit file .env:

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

bash
php artisan migrate

Langkah 6: Jalankan Server

bash
php artisan serve

Akses: 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 -v dan composer -V
  • Mengakses project Laravel di browser
  • Menjalankan php artisan migrate tanpa error
  • Memahami dasar PHP dan OOP

Selamat! Anda siap untuk Hari 2: Routing, Controllers, dan Views!


Referensi

Dibuat dengan ❤️ untuk ASN Indonesia