đŸ’ģ Pemrograman Web 2
🎓 Pertemuan
Pertemuan 9: Pengenalan Framework Laravel & MVC

MODUL PEMROGRAMAN WEBSITE 2

Mata Kuliah: Pemrograman Website 2
Kode MK: INF2419
SKS: 3 (Praktikum)
Semester: Genap 2025/2026
Program Studi: Informatika
Fakultas: FEBI / Saintek
Universitas: UIN K.H. Abdurrahman Wahid Pekalongan

Dosen Pengampu: Mohammad Reza Maulana, M.Kom
NIP: 199110082025051002

Pertemuan: 9 dari 16
Durasi: 150 menit (3 × 50 menit)
Studi Kasus Berkelanjutan: Sistem Manajemen Perpustakaan


PERTEMUAN 9

PENGENALAN FRAMEWORK LARAVEL & MVC

A. INFORMASI PERTEMUAN

AspekKeterangan
Capaian Pembelajaran Lulusan (CPL)CPL05: Memiliki pengetahuan memadai tentang cara kerja sistem komputer dan mampu merancang solusi algoritmik menggunakan framework.
Capaian Pembelajaran Mata Kuliah (CPMK)CPMK05.1: Mampu merancang struktur aplikasi web backend berbasis framework dengan pendekatan MVC
Sub-CPMKSub-CPMK05.1.1: Mampu menjelaskan konsep framework dan arsitektur MVC
Indikator PencapaianMahasiswa mampu:
1. Menjelaskan limitasi PHP native dan manfaat framework
2. Menjelaskan konsep arsitektur MVC
3. Menginstall Laravel via Composer
4. Memahami struktur folder Laravel
5. Membuat routing sederhana
6. Membuat view dengan Blade template
7. Membuat controller pertama
8. Menjalankan Laravel development server
Alokasi Waktuâ€ĸ Teori: 60 menit
â€ĸ Praktikum: 90 menit
â€ĸ Total: 150 menit (3 × 50 menit)

B. PENDAHULUAN

1. Deskripsi Singkat

Pertemuan kesembilan ini menandai transisi penting dari pemrograman PHP native ke penggunaan framework Laravel. Mahasiswa akan mempelajari konsep framework, arsitektur MVC (Model-View-Controller), instalasi Laravel via Composer, struktur folder, routing, dan cara kerja dasar Laravel. Pertemuan ini merupakan fondasi untuk pengembangan aplikasi perpustakaan yang lebih terstruktur dan maintainable.

2. Keterkaitan dengan Pertemuan Lain

Pertemuan ini adalah titik balik dari native ke framework:

  • Pertemuan 2-7: Konsep PHP native menjadi dasar untuk memahami Laravel
  • Pertemuan 8: UTS mengevaluasi kemampuan PHP native sebelum masuk framework
  • Pertemuan 10-11: Migration, Model, Controller, View akan dipelajari lebih detail
  • Pertemuan 12-15: Semua fitur CRUD dan transaksi dibangun dengan Laravel

3. Manfaat Pembelajaran

  1. Memahami kenapa framework diperlukan dalam pengembangan web
  2. Dapat menginstall dan konfigurasi Laravel
  3. Memahami konsep MVC yang digunakan di banyak framework
  4. Siap mengembangkan aplikasi web yang scalable dan maintainable
  5. Memiliki skill framework yang sangat dibutuhkan industri

4. Relevansi dengan Studi Kasus

Sistem perpustakaan akan dibangun ulang dengan Laravel untuk:

  • Struktur code yang lebih terorganisir (MVC)
  • Database migration untuk versioning schema
  • Eloquent ORM untuk query yang lebih mudah
  • Blade template untuk view yang lebih clean
  • Built-in authentication untuk login
  • Validasi dan security yang lebih baik

C. MATERI TEORI

1. Limitasi PHP Native

a. Masalah dalam PHP Native

Setelah 7 pertemuan menggunakan PHP native, kita sudah membuat sistem perpustakaan sederhana. Namun, ada beberapa masalah:

1. Code Repetition

// Di setiap file harus include koneksi
include 'config/database.php';
 
// Validasi yang sama ditulis berulang
if (empty($judul)) {
    $errors[] = "Judul wajib diisi";
}

2. Tidak Ada Struktur Baku

perpustakaan/
├── index.php
├── tambah_buku.php
├── edit_buku.php
├── hapus_buku.php
├── functions.php
├── koneksi.php
└── ... (tidak konsisten antar project)

3. Logic & Presentation Campur

<?php
// Logic
$query = "SELECT * FROM buku";
$result = mysqli_query($conn, $query);
 
// Langsung tampilkan
while ($buku = mysqli_fetch_assoc($result)) {
    echo "<tr>";
    echo "<td>" . $buku['judul'] . "</td>";
    // ... mixing logic dan HTML
}
?>

4. Manual Security Handling

// Harus manual sanitasi di setiap input
$judul = htmlspecialchars($_POST['judul']);
$judul = mysqli_real_escape_string($conn, $judul);
 
// Rawan lupa atau salah implement

5. Routing Manual

// URL tidak SEO friendly
buku.php?action=detail&id=5
 
// Harus manual handle semua route
if ($_GET['action'] == 'detail') {
    // ...
}

6. Tidak Ada Helper Functions

// Harus buat sendiri fungsi-fungsi umum
function format_rupiah($angka) {
    return "Rp " . number_format($angka, 0, ',', '.');
}
 
// Harus maintain sendiri

b. Solusi: Framework

Framework adalah kumpulan library dan tool yang menyediakan struktur dan best practices untuk pengembangan aplikasi.

Keuntungan Framework:

  • ✅ Struktur project yang konsisten
  • ✅ Code reusability tinggi
  • ✅ Security built-in
  • ✅ Helper functions ready to use
  • ✅ Routing system yang powerful
  • ✅ ORM untuk database
  • ✅ Template engine untuk view
  • ✅ Community support

2. Pengenalan Laravel

a. Apa itu Laravel?

Laravel adalah framework PHP yang paling populer saat ini. Dibuat oleh Taylor Otwell pada tahun 2011.

Filosofi Laravel:

"Web Artisan Framework" - membuat development menjadi lebih elegan dan menyenangkan

Mengapa Laravel?

  1. Expressive & Elegant Syntax - code yang mudah dibaca
  2. MVC Architecture - struktur yang jelas
  3. Built-in Features - banyak fitur siap pakai
  4. Large Community - banyak tutorial dan package
  5. Documentation - dokumentasi sangat lengkap
  6. Job Opportunities - banyak dicari perusahaan

b. Versi Laravel

VersiReleasePHP MinStatus
Laravel 8Sept 20207.3Maintenance
Laravel 9Feb 20228.0Maintenance
Laravel 10Feb 20238.1Maintenance
Laravel 11Q1 20248.2Development
Laravel 12Feb 20258.2Development

Kita akan menggunakan Laravel 12

c. Fitur Utama Laravel

1. Eloquent ORM

// Native PHP
$query = "SELECT * FROM buku WHERE kategori = 'Programming'";
$result = mysqli_query($conn, $query);
 
// Laravel Eloquent
$buku = Buku::where('kategori', 'Programming')->get();

2. Blade Templating

// Native PHP
<?php foreach ($buku_list as $buku): ?>
    <h3><?php echo $buku['judul']; ?></h3>
<?php endforeach; ?>
 
// Laravel Blade
@foreach ($buku_list as $buku)
    <h3>{{ $buku->judul }}</h3>
@endforeach

3. Migration

// Native: Manual buat tabel di phpMyAdmin
 
// Laravel: Code-based schema
Schema::create('buku', function (Blueprint $table) {
    $table->id();
    $table->string('judul');
    $table->integer('stok');
    $table->timestamps();
});

4. Routing

// Native: buku.php?id=5
 
// Laravel: /buku/5
Route::get('/buku/{id}', [BukuController::class, 'show']);

5. Authentication

// Native: Buat sendiri login, session, dll
 
// Laravel: Built-in
```bash
php artisan make:auth

6. Validation

// Native: Manual validasi satu-satu
 
// Laravel: Declarative
$request->validate([
    'judul' => 'required|min:3',
    'harga' => 'required|numeric|min:10000'
]);

3. Arsitektur MVC

a. Apa itu MVC?

MVC (Model-View-Controller) adalah design pattern untuk memisahkan logic, data, dan presentation.

┌─────────────────────────────────────────────────┐
│                     USER                        │
│              (Browser / Client)                 │
└────────────────â”Ŧ────────────────────────────────┘
                 │
                 │ HTTP Request
                 â–ŧ
┌─────────────────────────────────────────────────┐
│                  ROUTING                        │
│         (routes/web.php)                        │
└────────────────â”Ŧ────────────────────────────────┘
                 │
                 │ Route to Controller
                 â–ŧ
┌─────────────────────────────────────────────────┐
│                CONTROLLER                       │
│        (app/Http/Controllers)                   │
│  ┌──────────────────────────────────────────┐  │
│  │ - Terima request                         │  │
│  │ - Validasi input                         │  │
│  │ - Panggil Model                          │  │
│  │ - Kirim data ke View                     │  │
│  └──────────────────────────────────────────┘  │
└─────────â”Ŧ──────────────────────────────â”Ŧ────────┘
          │                              │
          │ Get Data                     │ Send Data
          â–ŧ                              â–ŧ
┌──────────────────────┐      ┌──────────────────────┐
│       MODEL          │      │        VIEW          │
│  (app/Models)        │      │  (resources/views)   │
│ ┌──────────────────┐ │      │ ┌──────────────────┐ │
│ │ - Kelola data    │ │      │ │ - Tampilkan UI   │ │
│ │ - Database query │ │      │ │ - Terima data    │ │
│ │ - Business logic │ │      │ │ - Render HTML    │ │
│ └──────────────────┘ │      │ └──────────────────┘ │
└──────────â”Ŧ───────────┘      └──────────â”Ŧ───────────┘
           │                             │
           │ Data                        │ HTML
           â–ŧ                             â–ŧ
┌─────────────────────────────────────────────────┐
│                 DATABASE                        │
│              (MySQL / MariaDB)                  │
└─────────────────────────────────────────────────┘
                           │
                           │ Response
                           â–ŧ
                        Browser

b. Komponen MVC

1. Model

  • Mengelola data aplikasi
  • Berkomunikasi dengan database
  • Berisi business logic
  • Independent dari UI

Contoh:

// app/Models/Buku.php
class Buku extends Model
{
    // Model mengelola data buku
    public function kategori()
    {
        return $this->belongsTo(Kategori::class);
    }
    
    public function tersedia()
    {
        return $this->stok > 0;
    }
}

2. View

  • Layer untuk menampilkan data
  • Menerima data dari Controller
  • Tidak boleh ada business logic
  • Pure presentation

Contoh:

<!-- resources/views/buku/index.blade.php -->
<h1>Daftar Buku</h1>
<table>
    @foreach ($buku_list as $buku)
        <tr>
            <td>{{ $buku->judul }}</td>
            <td>{{ $buku->stok }}</td>
        </tr>
    @endforeach
</table>

3. Controller

  • Koordinator antara Model dan View
  • Menerima request dari user
  • Memanggil Model untuk data
  • Mengirim data ke View
  • Mengembalikan response

Contoh:

// app/Http/Controllers/BukuController.php
class BukuController extends Controller
{
    public function index()
    {
        // Ambil data dari Model
        $buku_list = Buku::all();
        
        // Kirim ke View
        return view('buku.index', compact('buku_list'));
    }
}

c. Alur Kerja MVC

Skenario: User mengakses /buku

1. User buka browser → http://localhost:8000/buku

2. Laravel Routing (routes/web.php)
   ↓
   Route::get('/buku', [BukuController::class, 'index']);
   
3. BukuController → method index()
   ↓
   public function index() {
       // Panggil Model
       $buku = Buku::all();
       
       // Return View dengan data
       return view('buku.index', compact('buku'));
   }

4. Model Buku → Query database
   ↓
   SELECT * FROM buku;
   
5. Database → Return data
   ↓
   [
       ['id' => 1, 'judul' => 'PHP'],
       ['id' => 2, 'judul' => 'Laravel']
   ]

6. Controller → Kirim data ke View

7. View (buku/index.blade.php) → Render HTML
   ↓
   <table>
       <tr><td>PHP</td></tr>
       <tr><td>Laravel</td></tr>
   </table>

8. Browser → Tampilkan HTML

d. Manfaat MVC

1. Separation of Concerns

  • Model: fokus data
  • View: fokus tampilan
  • Controller: fokus logic

2. Code Reusability

// Model Buku bisa dipakai di banyak Controller
BukuController → Buku::all()
LaporanController → Buku::all()
APIController → Buku::all()

3. Maintainability

// Ubah tampilan? Edit View aja
// Ubah logic? Edit Controller aja
// Ubah struktur data? Edit Model aja

4. Team Collaboration

  • Frontend dev fokus ke View
  • Backend dev fokus ke Model & Controller
  • Bisa parallel development

5. Testing

// Model bisa di-test terpisah
// Controller bisa di-test terpisah
// View bisa di-test terpisah

4. Struktur Folder Laravel

a. Root Directory

perpustakaan/
├── app/                 # Core aplikasi
├── bootstrap/           # Framework bootstrap
├── config/              # Konfigurasi
├── database/            # Migration, seeder, factory
├── public/              # Entry point & assets
├── resources/           # Views, assets mentah
├── routes/              # Route definitions
├── storage/             # File generated
├── tests/               # Testing
├── vendor/              # Dependencies (Composer)
├── .env                 # Environment config
├── artisan              # CLI tool
└── composer.json        # Composer config

b. Folder Penting

1. app/ - Aplikasi Utama

app/
├── Http/
│   ├── Controllers/     # ⭐ Controller
│   └── Middleware/      # Middleware
├── Models/              # ⭐ Model
└── Providers/           # Service providers

2. resources/ - Resource Files

resources/
├── views/               # ⭐ Blade templates (View)
├── css/                 # CSS source
└── js/                  # JS source

3. routes/ - Routing

routes/
├── web.php              # ⭐ Web routes (paling sering dipakai)
├── api.php              # API routes
└── console.php          # Console commands

4. database/ - Database

database/
├── migrations/          # ⭐ Database migrations
├── seeders/             # Database seeders
└── factories/           # Model factories

5. public/ - Public Access

public/
├── index.php            # Entry point
├── css/                 # Compiled CSS
├── js/                  # Compiled JS
└── images/              # Images

6. config/ - Konfigurasi

config/
├── app.php              # App config
├── database.php         # Database config
└── ...                  # Other configs

c. File Penting

1. .env - Environment Configuration

APP_NAME=Perpustakaan
APP_ENV=local
APP_DEBUG=true
APP_URL=http://localhost

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

2. routes/web.php - Web Routes

<?php
use Illuminate\Support\Facades\Route;
 
Route::get('/', function () {
    return view('welcome');
});

3. composer.json - Dependencies

{
    "require": {
        "<?php": "^8.1",
        "laravel/framework": "^12.0"
    }
}

4. artisan - CLI Tool

php artisan serve         # Jalankan server
php artisan make:model    # Buat model
php artisan migrate       # Jalankan migration

5. Routing di Laravel

a. Konsep Routing

Routing menentukan bagaimana aplikasi merespons request ke URL tertentu.

File: routes/web.php

Sintaks Dasar:

Route::method('uri', callback);

Contoh:

Route::get('/', function () {
    return 'Hello World';
});

b. HTTP Methods

Route::get('/buku', function () {
    // Handle GET request
});
 
Route::post('/buku', function () {
    // Handle POST request (form submit)
});
 
Route::put('/buku/{id}', function ($id) {
    // Handle PUT request (update)
});
 
Route::delete('/buku/{id}', function ($id) {
    // Handle DELETE request
});

c. Route Parameters

1. Required Parameter:

Route::get('/buku/{id}', function ($id) {
    return "Detail buku ID: " . $id;
});
 
// URL: /buku/5
// Output: Detail buku ID: 5

2. Optional Parameter:

Route::get('/kategori/{nama?}', function ($nama = 'Semua') {
    return "Kategori: " . $nama;
});
 
// URL: /kategori
// Output: Kategori: Semua
 
// URL: /kategori/Programming
// Output: Kategori: Programming

3. Multiple Parameters:

Route::get('/buku/{kategori}/{tahun}', function ($kategori, $tahun) {
    return "Buku kategori $kategori tahun $tahun";
});
 
// URL: /buku/Programming/2024
// Output: Buku kategori Programming tahun 2024

d. Named Routes

// Define named route
Route::get('/buku/{id}', function ($id) {
    return "Detail buku $id";
})->name('buku.detail');
 
// Gunakan di view atau controller
<a href="{{ route('buku.detail', ['id' => 5]) }}">
    Detail Buku
</a>
 
// Generate: /buku/5

e. Route Groups

// Prefix semua route dengan /admin
Route::prefix('admin')->group(function () {
    Route::get('/buku', function () {
        // URL: /admin/buku
    });
    
    Route::get('/anggota', function () {
        // URL: /admin/anggota
    });
});

f. Route to Controller

use App\Http\Controllers\BukuController;
 
Route::get('/buku', [BukuController::class, 'index']);
Route::get('/buku/{id}', [BukuController::class, 'show']);

g. Resource Routes

// 7 route CRUD sekaligus
Route::resource('buku', BukuController::class);
 
// Generate:
// GET    /buku           → index()
// GET    /buku/create    → create()
// POST   /buku           → store()
// GET    /buku/{id}      → show()
// GET    /buku/{id}/edit → edit()
// PUT    /buku/{id}      → update()
// DELETE /buku/{id}      → destroy()

6. Blade Template Engine

a. Apa itu Blade?

Blade adalah template engine Laravel untuk membuat view.

Keuntungan Blade:

  • Sintaks yang clean dan elegant
  • Template inheritance
  • Sections & layouts
  • Directives (@if, @foreach, dll)
  • Component system
  • Otomatis escape output (XSS protection)

b. Sintaks Dasar

1. Echo Data:

<!-- Native PHP -->
<?php echo $judul; ?>
 
<!-- Blade (auto-escaped) -->
{{ $judul }}
 
<!-- Blade (raw HTML) -->
{!! $html_content !!}

2. Komentar:

{{-- Komentar Blade (tidak muncul di HTML) --}}
 
<!-- Komentar HTML (muncul di source) -->

c. Control Structures

1. If Statement:

@if ($stok > 10)
    <p>Stok aman</p>
@elseif ($stok > 0)
    <p>Stok menipis</p>
@else
    <p>Habis</p>
@endif

2. Foreach Loop:

@foreach ($buku_list as $buku)
    <li>{{ $buku->judul }}</li>
@endforeach

3. For Loop:

@for ($i = 1; $i <= 10; $i++)
    <p>Buku ke-{{ $i }}</p>
@endfor

4. While Loop:

@while ($stok > 0)
    <p>Stok: {{ $stok-- }}</p>
@endwhile

5. Empty Check:

@empty($buku_list)
    <p>Tidak ada buku</p>
@endempty

6. Isset Check:

@isset($buku)
    <p>{{ $buku->judul }}</p>
@endisset

d. Template Inheritance

Master Layout:

<!-- resources/views/layouts/app.blade.php -->
<!DOCTYPE html>
<html>
<head>
    <title>@yield('title')</title>
</head>
<body>
    <header>
        @include('partials.navbar')
    </header>
    
    <main>
        @yield('content')
    </main>
    
    <footer>
        @include('partials.footer')
    </footer>
</body>
</html>

Child View:

<!-- resources/views/buku/index.blade.php -->
@extends('layouts.app')
 
@section('title', 'Daftar Buku')
 
@section('content')
    <h1>Daftar Buku</h1>
    <!-- Content here -->
@endsection

7. Artisan CLI

a. Apa itu Artisan?

Artisan adalah command-line interface Laravel untuk mempermudah development.

Cara Menggunakan:

php artisan command:name

b. Command Penting

1. Server:

php artisan serve
# Jalankan development server di localhost:8000
 
php artisan serve --port=8080
# Jalankan di port 8080

2. Make Commands:

php artisan make:controller BukuController
# Buat controller
 
php artisan make:model Buku
# Buat model
 
php artisan make:migration create_buku_table
# Buat migration
 
php artisan make:seeder BukuSeeder
# Buat seeder
 
php artisan make:request BukuRequest
# Buat form request

3. Database:

php artisan migrate
# Jalankan migration
 
php artisan migrate:fresh
# Drop semua tabel dan migrate ulang
 
php artisan migrate:rollback
# Rollback migration terakhir
 
php artisan db:seed
# Jalankan seeder

4. Route:

php artisan route:list
# Lihat semua route
 
php artisan route:cache
# Cache route untuk performance

5. Cache:

php artisan cache:clear
# Clear application cache
 
php artisan config:clear
# Clear config cache
 
php artisan view:clear
# Clear compiled views

6. Tinker:

php artisan tinker
# Interactive shell untuk testing code

8. Composer

a. Apa itu Composer?

Composer adalah dependency manager untuk PHP.

Fungsi:

  • Mengelola library/package PHP
  • Autoloading classes
  • Mengelola dependencies
  • Update package

b. Instalasi Composer

Windows:

  1. Download dari https://getcomposer.org/ (opens in a new tab)
  2. Install Composer-Setup.exe
  3. Ikuti wizard instalasi
  4. Restart CMD/Terminal
  5. Cek: composer --version

Mac/Linux:

curl -sS https://getcomposer.org/installer | <?php
sudo mv composer.phar /usr/local/bin/composer
composer --version

c. Command Penting

composer install
 
# Update dependencies
composer update
 
# Add package
composer require vendor/package
 
# Remove package
composer remove vendor/package
 
# Regenerate autoload
composer dump-autoload

d. composer.json

{
    "name": "perpustakaan",
    "require": {
        "<?php": "^8.1",
        "laravel/framework": "^12.0"
    },
    "require-dev": {
        "laravel/sail": "^1.0"
    },
    "autoload": {
        "psr-4": {
            "App\\": "app/"
        }
    }
}

D. PRAKTIKUM

1. Tujuan Praktikum

  1. Menginstall Composer dan Laravel
  2. Membuat project Laravel pertama
  3. Konfigurasi environment Laravel
  4. Menjalankan development server
  5. Memahami struktur folder Laravel
  6. Membuat routing sederhana
  7. Membuat view dengan Blade
  8. Membuat controller pertama

2. PRAKTIKUM 1: Instalasi Composer

Tujuan

Menginstall Composer sebagai dependency manager PHP.

Langkah-langkah

a. Download Composer

  1. Buka browser: https://getcomposer.org/ (opens in a new tab)
  2. Klik "Download"
  3. Download Composer-Setup.exe (untuk Windows)

b. Install Composer

  1. Jalankan file Composer-Setup.exe
  2. Ikuti wizard instalasi:
    • Developer mode: Tidak (unchecked)
    • PHP executable: Pilih C:\xampp\<?php\<?php.exe
    • Proxy settings: Skip (kecuali pakai proxy)
    • Klik "Next" sampai selesai

c. Verifikasi Instalasi

  1. Buka CMD atau Terminal
  2. Jalankan:
composer --version
  1. Output yang diharapkan:
Composer version 2.6.x (atau lebih baru)

d. Testing Composer

# Cek command yang tersedia
composer list
 
# Cek diagnose
composer diagnose

Troubleshooting:

❌ Error: "composer not found"

  • Restart CMD/Terminal
  • Atau tambahkan ke PATH manually

❌ Error: "PHP not found"

  • Install PHP dulu via XAMPP
  • Atau install PHP standalone

3. PRAKTIKUM 2: Instalasi Laravel

Tujuan

Menginstall Laravel dan membuat project perpustakaan.

Langkah-langkah

a. Buat Project Laravel

  1. Buka CMD/Terminal
  2. Navigate ke folder htdocs:
cd C:\xampp\htdocs
  1. Install Laravel:
composer create-project laravel/laravel perpustakaan
  1. Tunggu proses instalasi (3-5 menit tergantung internet)

Output yang diharapkan:

Creating a "laravel/laravel" project at "./perpustakaan"
Installing laravel/laravel (v1200)
  - Installing dependencies from lock file
  ...
  Application ready! Build something amazing.

b. Struktur Folder yang Terbuat

C:\xampp\htdocs\perpustakaan\
├── app/
├── bootstrap/
├── config/
├── database/
├── public/
├── resources/
├── routes/
├── storage/
├── tests/
├── vendor/
├── .env
├── artisan
└── composer.json

c. Verifikasi Instalasi

  1. Navigate ke folder project:
cd perpustakaan
  1. Cek versi Laravel:
php artisan --version
  1. Output:
Laravel Framework 12.x.x

Troubleshooting:

❌ Error: "Failed to download"

  • Cek koneksi internet
  • Atau gunakan: composer create-project laravel/laravel perpustakaan --prefer-dist

❌ Error: "Could not find package"

  • Update Composer: composer self-update
  • Coba lagi

4. PRAKTIKUM 3: Konfigurasi Environment

Tujuan

Mengkonfigurasi environment Laravel untuk project perpustakaan.

Langkah-langkah

a. Edit File .env

  1. Buka folder project: C:\xampp\htdocs\perpustakaan
  2. Buka file .env dengan text editor
  3. Edit konfigurasi database:
APP_NAME=Perpustakaan
APP_ENV=local
APP_DEBUG=true
APP_URL=http://localhost:8000

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

b. Buat Database

  1. Start Apache & MySQL di XAMPP
  2. Buka phpMyAdmin: http://localhost/phpmyadmin (opens in a new tab)
  3. Buat database baru: perpustakaan_laravel
  4. Collation: utf8mb4_unicode_ci

c. Test Koneksi Database

  1. Buka CMD di folder project
  2. Jalankan:
php artisan migrate
  1. Jika berhasil:
Migration table created successfully.
Migrating: xxxx_create_users_table
Migrated:  xxxx_create_users_table
...
  1. Cek di phpMyAdmin - akan ada tabel:
    • migrations
    • users
    • password_resets
    • failed_jobs
    • personal_access_tokens

d. Generate Application Key

php artisan key:generate

Output:

Application key set successfully.

Troubleshooting:

❌ Error: "SQLSTATE[HY000] [1045] Access denied"

  • Cek DB_USERNAME dan DB_PASSWORD di .env
  • Pastikan MySQL running

❌ Error: "SQLSTATE[HY000] [1049] Unknown database"

  • Buat database dulu di phpMyAdmin

5. PRAKTIKUM 4: Menjalankan Development Server

Tujuan

Menjalankan Laravel development server dan mengakses aplikasi.

Langkah-langkah

a. Start Server

  1. Buka CMD di folder project
  2. Jalankan:
php artisan serve
  1. Output:
INFO  Server running on [http://127.0.0.1:8000].

Press Ctrl+C to stop the server

b. Akses Aplikasi

  1. Buka browser
  2. Akses: http://localhost:8000 (opens in a new tab)
  3. Akan muncul Laravel Welcome Page

![Laravel Welcome Page]

  • Logo Laravel
  • Links: Documentation, Laracasts, News, etc.
  • PHP Version info
  • Laravel Version info

c. Testing Routes

  1. Coba akses: http://localhost:8000/ (opens in a new tab) → Welcome page

  2. Coba akses: http://localhost:8000/test (opens in a new tab) → 404 Not Found (karena route belum dibuat)

d. Custom Port

Jika port 8000 sudah dipakai:

php artisan serve --port=8080

Akses: http://localhost:8080 (opens in a new tab)

e. Stop Server

Tekan Ctrl + C di CMD

Troubleshooting:

❌ Error: "Address already in use"

  • Port 8000 sudah dipakai
  • Gunakan port lain: --port=8080

❌ Error: "Failed to listen"

  • Stop Apache di XAMPP
  • Atau gunakan port berbeda

6. PRAKTIKUM 5: Eksplorasi Struktur Folder

Tujuan

Memahami struktur folder Laravel dan file-file penting.

Langkah-langkah

a. Eksplorasi Folder app/

  1. Buka folder: perpustakaan/app/
  2. Struktur:
app/
├── Console/
├── Exceptions/
├── Http/
│   ├── Controllers/        # ⭐ Controller
│   │   └── Controller.php
│   ├── Middleware/
│   └── Kernel.php
├── Models/                 # ⭐ Model
│   └── User.php
└── Providers/
  1. Buka file app/Models/User.php:
<?php
 
namespace App\Models;
 
use Illuminate\Foundation\Auth\User as Authenticatable;
 
class User extends Authenticatable
{
    protected $fillable = [
        'name',
        'email',
        'password',
    ];
}
?>

b. Eksplorasi Folder resources/

  1. Buka folder: perpustakaan/resources/
  2. Struktur:
resources/
├── css/
│   └── app.css
├── js/
│   └── app.js
└── views/                  # ⭐ Blade Views
    └── welcome.blade.php
  1. Buka file resources/views/welcome.blade.php:
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>Laravel</title>
    </head>
    <body>
        <!-- Welcome content -->
    </body>
</html>

c. Eksplorasi Folder routes/

  1. Buka folder: perpustakaan/routes/
  2. File penting: web.php
  3. Isi awal:
<?php
 
use Illuminate\Support\Facades\Route;
 
Route::get('/', function () {
    return view('welcome');
});

d. Eksplorasi Folder public/

  1. Buka folder: perpustakaan/public/
  2. Struktur:
public/
├── index.php           # Entry point
├── .htaccess
├── favicon.ico
└── robots.txt
  1. File index.php adalah entry point aplikasi

e. Eksplorasi Folder database/

  1. Buka folder: perpustakaan/database/
  2. Struktur:
database/
├── factories/
│   └── UserFactory.php
├── migrations/          # ⭐ Database migrations
│   ├── xxxx_create_users_table.php
│   └── xxxx_create_password_resets_table.php
└── seeders/
    └── DatabaseSeeder.php
  1. Buka file migration users:
<?php
 
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
 
return new class extends Migration
{
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }
};

f. File .env

Review kembali file .env:

# Application
APP_NAME=Perpustakaan
APP_ENV=local
APP_DEBUG=true

# Database
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_DATABASE=perpustakaan_laravel
DB_USERNAME=root
DB_PASSWORD=

Kesimpulan Eksplorasi:

FolderFungsi
app/Models/Tempat Model (Database)
app/Http/Controllers/Tempat Controller
resources/views/Tempat View (Blade)
routes/web.phpDefine route
database/migrations/Database schema
public/Public access
.envConfiguration

7. PRAKTIKUM 6: Routing Sederhana

Tujuan

Membuat berbagai jenis route di Laravel.

Langkah-langkah

a. Route Closure Sederhana

  1. Buka file routes/web.php
  2. Tambahkan route:
<?php
 
use Illuminate\Support\Facades\Route;
 
// Route default
Route::get('/', function () {
    return view('welcome');
});
 
// Route baru - return text
Route::get('/hello', function () {
    return 'Hello dari Laravel!';
});
 
// Route dengan HTML
Route::get('/info', function () {
    return '<h1>Sistem Perpustakaan</h1><p>Selamat datang!</p>';
});
 
// Route dengan JSON
Route::get('/buku', function () {
    return [
        'judul' => 'Laravel Programming',
        'pengarang' => 'John Doe',
        'harga' => 150000
    ];
});
  1. Testing:

b. Route dengan Parameter

Tambahkan di routes/web.php:

// Route dengan parameter required
Route::get('/buku/{id}', function ($id) {
    return "Detail buku dengan ID: " . $id;
});
 
// Route dengan parameter optional
Route::get('/kategori/{nama?}', function ($nama = 'Semua Kategori') {
    return "Menampilkan kategori: " . $nama;
});
 
// Route dengan multiple parameters
Route::get('/search/{kategori}/{keyword}', function ($kategori, $keyword) {
    return "Cari buku kategori: $kategori dengan keyword: $keyword";
});
  1. Testing:

c. Named Routes

// Named route
Route::get('/perpustakaan', function () {
    return 'Halaman Perpustakaan';
})->name('perpus.home');
 
// Gunakan named route
Route::get('/test-route', function () {
    $url = route('perpus.home');
    return "URL perpustakaan: " . $url;
});

Testing: http://localhost:8000/test-route (opens in a new tab)

d. Route List

Lihat semua route yang sudah dibuat:

php artisan route:list

Output:

  GET|HEAD  /                 ...
  GET|HEAD  /hello            ...
  GET|HEAD  /info             ...
  GET|HEAD  /buku             ...
  GET|HEAD  /buku/{id}        ...
  ...

8. PRAKTIKUM 7: Membuat View dengan Blade

Tujuan

Membuat view dengan Blade template dan passing data.

Langkah-langkah

a. Buat File View

  1. Buat folder: resources/views/perpustakaan/
  2. Buat file: resources/views/perpustakaan/index.blade.php
<!DOCTYPE html>
<html lang="id">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>{{ $nama_sistem }}</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">
        <h1>{{ $nama_sistem }}</h1>
        <p class="lead">Selamat datang di sistem perpustakaan berbasis Laravel {{ $versi }}</p>
        
        <div class="alert alert-info">
            <strong>Info:</strong> Total buku yang tersedia: {{ $total_buku }}
        </div>
        
        <h3>Daftar Buku</h3>
        <table class="table table-striped">
            <thead>
                <tr>
                    <th>No</th>
                    <th>Judul</th>
                    <th>Pengarang</th>
                    <th>Harga</th>
                    <th>Stok</th>
                </tr>
            </thead>
            <tbody>
                @foreach ($buku_list as $index => $buku)
                <tr>
                    <td>{{ $index + 1 }}</td>
                    <td>{{ $buku['judul'] }}</td>
                    <td>{{ $buku['pengarang'] }}</td>
                    <td>Rp {{ number_format($buku['harga'], 0, ',', '.') }}</td>
                    <td>
                        @if ($buku['stok'] > 0)
                            <span class="badge bg-success">{{ $buku['stok'] }}</span>
                        @else
                            <span class="badge bg-danger">Habis</span>
                        @endif
                    </td>
                </tr>
                @endforeach
            </tbody>
        </table>
    </div>
</body>
</html>

b. Buat Route untuk View

Edit routes/web.php:

Route::get('/perpustakaan', function () {
    // Data untuk dikirim ke view
    $nama_sistem = "Sistem Perpustakaan Laravel";
    $versi = "12.x";
    $total_buku = 5;
    
    $buku_list = [
        [
            'judul' => 'Pemrograman PHP',
            'pengarang' => 'Budi Raharjo',
            'harga' => 75000,
            'stok' => 10
        ],
        [
            'judul' => 'Laravel Framework',
            'pengarang' => 'Andi Nugroho',
            'harga' => 125000,
            'stok' => 5
        ],
        [
            'judul' => 'MySQL Database',
            'pengarang' => 'Siti Aminah',
            'harga' => 95000,
            'stok' => 0
        ],
        [
            'judul' => 'Web Design',
            'pengarang' => 'Dedi Santoso',
            'harga' => 85000,
            'stok' => 8
        ],
        [
            'judul' => 'JavaScript Modern',
            'pengarang' => 'Rina Wijaya',
            'harga' => 80000,
            'stok' => 12
        ]
    ];
    
    // Return view dengan data
    return view('perpustakaan.index', [
        'nama_sistem' => $nama_sistem,
        'versi' => $versi,
        'total_buku' => $total_buku,
        'buku_list' => $buku_list
    ]);
});

c. Alternative: Menggunakan compact()

Route::get('/perpustakaan', function () {
    $nama_sistem = "Sistem Perpustakaan Laravel";
    $versi = "12.x";
    $total_buku = 5;
    
    $buku_list = [
        // ... data buku sama
    ];
    
    // Menggunakan compact() - lebih praktis
    return view('perpustakaan.index', compact('nama_sistem', 'versi', 'total_buku', 'buku_list'));
});

d. Testing View

  1. Akses: http://localhost:8000/perpustakaan (opens in a new tab)
  2. Lihat hasil:
    • Title halaman: "Sistem Perpustakaan Laravel"
    • Heading dengan nama sistem
    • Alert info total buku
    • Tabel daftar buku dengan Bootstrap
    • Badge hijau untuk stok tersedia
    • Badge merah untuk stok habis

e. Blade Directives yang Digunakan

{{ $variabel }}           // Echo data (auto-escaped)
@foreach ($array as $item) // Loop
@if ($kondisi)            // Kondisi
@else                     // Else
@endif                    // End if
@endforeach              // End foreach

9. PRAKTIKUM 8: Membuat Controller Pertama

Tujuan

Membuat controller untuk mengelola logic aplikasi (implementasi MVC).

Langkah-langkah

a. Generate Controller

  1. Buka CMD di folder project
  2. Generate controller:
php artisan make:controller PerpustakaanController
  1. Output:
INFO  Controller [app/Http/Controllers/PerpustakaanController.php] created successfully.

b. Edit Controller

  1. Buka file: app/Http/Controllers/PerpustakaanController.php
  2. Edit isinya:
<?php
 
namespace App\Http\Controllers;
 
use Illuminate\Http\Request;
 
class PerpustakaanController extends Controller
{
    // Method untuk halaman index
    public function index()
    {
        $nama_sistem = "Sistem Perpustakaan Laravel";
        $versi = "12.x";
        $total_buku = 5;
        
        $buku_list = [
            [
                'id' => 1,
                'judul' => 'Pemrograman PHP',
                'pengarang' => 'Budi Raharjo',
                'harga' => 75000,
                'stok' => 10
            ],
            [
                'id' => 2,
                'judul' => 'Laravel Framework',
                'pengarang' => 'Andi Nugroho',
                'harga' => 125000,
                'stok' => 5
            ],
            [
                'id' => 3,
                'judul' => 'MySQL Database',
                'pengarang' => 'Siti Aminah',
                'harga' => 95000,
                'stok' => 0
            ],
            [
                'id' => 4,
                'judul' => 'Web Design',
                'pengarang' => 'Dedi Santoso',
                'harga' => 85000,
                'stok' => 8
            ],
            [
                'id' => 5,
                'judul' => 'JavaScript Modern',
                'pengarang' => 'Rina Wijaya',
                'harga' => 80000,
                'stok' => 12
            ]
        ];
        
        return view('perpustakaan.index', compact('nama_sistem', 'versi', 'total_buku', 'buku_list'));
    }
    
    // Method untuk detail buku
    public function show($id)
    {
        // Data buku (nanti akan dari database)
        $buku_list = [
            1 => [
                'id' => 1,
                'judul' => 'Pemrograman PHP',
                'pengarang' => 'Budi Raharjo',
                'penerbit' => 'Informatika',
                'tahun' => 2023,
                'harga' => 75000,
                'stok' => 10,
                'deskripsi' => 'Buku panduan lengkap pemrograman PHP dari dasar hingga advanced'
            ],
            2 => [
                'id' => 2,
                'judul' => 'Laravel Framework',
                'pengarang' => 'Andi Nugroho',
                'penerbit' => 'Graha Ilmu',
                'tahun' => 2024,
                'harga' => 125000,
                'stok' => 5,
                'deskripsi' => 'Membangun aplikasi web modern dengan Laravel framework'
            ],
            // ... data lainnya
        ];
        
        // Cek apakah buku ada
        if (!isset($buku_list[$id])) {
            abort(404, 'Buku tidak ditemukan');
        }
        
        $buku = $buku_list[$id];
        
        return view('perpustakaan.show', compact('buku'));
    }
    
    // Method untuk halaman about
    public function about()
    {
        $info = [
            'nama' => 'Sistem Perpustakaan Laravel',
            'versi' => '1.0.0',
            'deskripsi' => 'Sistem manajemen perpustakaan berbasis Laravel framework',
            'developer' => 'Nama Mahasiswa',
            'tahun' => date('Y')
        ];
        
        return view('perpustakaan.about', compact('info'));
    }
}
?>

c. Update Routes

Edit routes/web.php:

<?php
 
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\PerpustakaanController;
 
Route::get('/', function () {
    return view('welcome');
});
 
// Route menggunakan Controller
Route::get('/perpustakaan', [PerpustakaanController::class, 'index']);
Route::get('/buku/{id}', [PerpustakaanController::class, 'show']);
Route::get('/about', [PerpustakaanController::class, 'about']);

d. Buat View untuk Detail Buku

Buat file: resources/views/perpustakaan/show.blade.php

<!DOCTYPE html>
<html lang="id">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>{{ $buku['judul'] }}</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">
        <nav aria-label="breadcrumb">
            <ol class="breadcrumb">
                <li class="breadcrumb-item"><a href="/perpustakaan">Perpustakaan</a></li>
                <li class="breadcrumb-item active">{{ $buku['judul'] }}</li>
            </ol>
        </nav>
        
        <div class="card">
            <div class="card-header bg-primary text-white">
                <h3 class="mb-0">{{ $buku['judul'] }}</h3>
            </div>
            <div class="card-body">
                <div class="row">
                    <div class="col-md-8">
                        <table class="table table-borderless">
                            <tr>
                                <th width="150">ID Buku</th>
                                <td>: {{ $buku['id'] }}</td>
                            </tr>
                            <tr>
                                <th>Judul</th>
                                <td>: {{ $buku['judul'] }}</td>
                            </tr>
                            <tr>
                                <th>Pengarang</th>
                                <td>: {{ $buku['pengarang'] }}</td>
                            </tr>
                            <tr>
                                <th>Penerbit</th>
                                <td>: {{ $buku['penerbit'] }}</td>
                            </tr>
                            <tr>
                                <th>Tahun Terbit</th>
                                <td>: {{ $buku['tahun'] }}</td>
                            </tr>
                            <tr>
                                <th>Harga</th>
                                <td>: Rp {{ number_format($buku['harga'], 0, ',', '.') }}</td>
                            </tr>
                            <tr>
                                <th>Stok</th>
                                <td>: 
                                    @if ($buku['stok'] > 0)
                                        <span class="badge bg-success">{{ $buku['stok'] }} tersedia</span>
                                    @else
                                        <span class="badge bg-danger">Habis</span>
                                    @endif
                                </td>
                            </tr>
                        </table>
                        
                        <hr>
                        
                        <h5>Deskripsi:</h5>
                        <p>{{ $buku['deskripsi'] }}</p>
                    </div>
                    <div class="col-md-4">
                        <div class="card bg-light">
                            <div class="card-body text-center">
                                <h4 class="text-primary">Rp {{ number_format($buku['harga'], 0, ',', '.') }}</h4>
                                
                                @if ($buku['stok'] > 0)
                                    <button class="btn btn-success btn-lg w-100 mt-3">
                                        <i class="bi bi-cart-plus"></i> Pinjam Buku
                                    </button>
                                @else
                                    <button class="btn btn-secondary btn-lg w-100 mt-3" disabled>
                                        Stok Habis
                                    </button>
                                @endif
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        
        <div class="mt-3">
            <a href="/perpustakaan" class="btn btn-secondary">
                <i class="bi bi-arrow-left"></i> Kembali ke Daftar Buku
            </a>
        </div>
    </div>
</body>
</html>

e. Testing Controller

  1. Akses halaman index:

  2. Akses detail buku:

  3. Lihat route list:

php artisan route:list

f. Alur MVC yang Terjadi

1. User akses: /perpustakaan

2. routes/web.php:
   Route::get('/perpustakaan', [PerpustakaanController::class, 'index'])

3. PerpustakaanController::index():
   - Siapkan data
   - Return view dengan data

4. View: perpustakaan/index.blade.php
   - Terima data
   - Render HTML

5. Browser:
   - Tampilkan HTML

Kesimpulan: ✅ Controller sudah berfungsi ✅ Routing ke Controller berhasil ✅ View menerima data dari Controller ✅ MVC pattern sudah terimplementasi


E. TUGAS

Tugas 1: Routing dan View untuk Anggota (40%)

Instruksi: Buat sistem routing dan view untuk mengelola data anggota perpustakaan.

Spesifikasi:

  1. Buat route di routes/web.php:
Route::get('/anggota', function () {
    // Data anggota
});
 
Route::get('/anggota/{id}', function ($id) {
    // Detail anggota
});
  1. Buat view resources/views/anggota/index.blade.php:

    • Judul: "Daftar Anggota Perpustakaan"
    • Tabel dengan minimal 5 anggota
    • Kolom: No, Kode Anggota, Nama, Email, Status, Aksi
    • Link detail untuk setiap anggota
    • Gunakan Bootstrap 5
  2. Data anggota yang harus ada:

$anggota_list = [
    [
        'id' => 1,
        'kode' => 'AGT-001',
        'nama' => 'Budi Santoso',
        'email' => 'budi@email.com',
        'telepon' => '081234567890',
        'alamat' => 'Jakarta',
        'status' => 'Aktif'
    ],
    // ... minimal 5 anggota
];
  1. Buat view resources/views/anggota/show.blade.php:
    • Detail lengkap anggota
    • Card Bootstrap dengan informasi:
      • Kode Anggota
      • Nama Lengkap
      • Email
      • Telepon
      • Alamat
      • Status (badge)
    • Tombol kembali ke daftar

Tugas 2: Controller untuk Kategori Buku (60%)

Instruksi: Buat controller untuk mengelola kategori buku dengan implementasi MVC lengkap.

Spesifikasi:

  1. Generate Controller:
php artisan make:controller KategoriController
  1. Implementasi 3 method di Controller:

a. Method index() - Daftar Kategori

public function index()
{
    // Data 5 kategori buku
    $kategori_list = [
        [
            'id' => 1,
            'nama' => 'Programming',
            'deskripsi' => 'Buku pemrograman dan coding',
            'jumlah_buku' => 25
        ],
        // ... 4 kategori lagi
    ];
    
    return view('kategori.index', compact('kategori_list'));
}

b. Method show($id) - Detail Kategori

public function show($id)
{
    // Data kategori dengan daftar buku
    $kategori = [...];
    $buku_list = [...]; // Buku dalam kategori ini
    
    return view('kategori.show', compact('kategori', 'buku_list'));
}

c. Method search($keyword) - Cari Kategori

public function search($keyword)
{
    // Filter kategori berdasarkan keyword
    // Return view dengan hasil
}
  1. Buat 3 view:

    • resources/views/kategori/index.blade.php
    • resources/views/kategori/show.blade.php
    • resources/views/kategori/search.blade.php
  2. Setup route:

use App\Http\Controllers\KategoriController;
 
Route::get('/kategori', [KategoriController::class, 'index']);
Route::get('/kategori/{id}', [KategoriController::class, 'show']);
Route::get('/kategori/search/{keyword}', [KategoriController::class, 'search']);

Output yang Diharapkan:

Index (/kategori):

  • Card Bootstrap untuk setiap kategori
  • Nama kategori
  • Deskripsi
  • Jumlah buku
  • Link ke detail

Show (/kategori/1):

  • Info kategori
  • Tabel buku dalam kategori
  • Breadcrumb navigation

Search (/kategori/search/programming):

  • Hasil pencarian kategori
  • Highlight keyword

Bonus (+10%):

  • Buat master layout (layouts/app.blade.php)
  • Semua view extends dari master layout
  • Ada navbar di master layout
  • Gunakan named routes

Template Code:

KategoriController.php:

<?php
 
namespace App\Http\Controllers;
 
use Illuminate\Http\Request;
 
class KategoriController extends Controller
{
    public function index()
    {
        // TODO: Implementasi
    }
    
    public function show($id)
    {
        // TODO: Implementasi
    }
    
    public function search($keyword)
    {
        // TODO: Implementasi
    }
}

Submission:

  • Screenshot hasil di browser (semua route) — lampirkan di README repository
  • Format: Link repository GitHub
  • Deadline: Pertemuan 10
  • Upload ke: Ngaji UIN Gusdur (submit link repository GitHub)

F. EVALUASI

1. Kuis Singkat (Dikerjakan di Kelas)

Soal Pilihan Ganda:

  1. MVC adalah singkatan dari:

    • A. Model View Creator
    • B. Model View Controller
    • C. Model Visual Controller
    • D. Multiple View Controller
  2. File konfigurasi environment Laravel adalah:

    • A. config.php
    • B. .env
    • C. environment.php
    • D. setting.php
  3. Command untuk menjalankan Laravel development server:

    • A. php artisan run
    • B. php artisan start
    • C. php artisan serve
    • D. php artisan launch
  4. Dalam MVC, yang bertugas berkomunikasi dengan database adalah:

    • A. View
    • B. Controller
    • C. Model
    • D. Route
  5. File route untuk web ada di:

    • A. app/routes.php
    • B. routes/web.php
    • C. config/routes.php
    • D. public/routes.php
  6. Sintaks Blade untuk echo data adalah:

    • A. `<?php echo $var ?>`
    • B. `<%= $var %>`
    • C. `{{ $var }}`
    • D. `{# $var #}`
  7. Command untuk menjalankan development server di port 8080:

    • A. php artisan serve 8080
    • B. php artisan serve --port=8080
    • C. php artisan start --port 8080
    • D. php artisan run:8080
  8. Composer adalah:

    • A. Text editor untuk PHP
    • B. Web server
    • C. Dependency manager untuk PHP
    • D. Database management tool
  9. Folder untuk menyimpan view Blade adalah:

    • A. app/views
    • B. resources/views
    • C. public/views
    • D. storage/views
  10. Extension file Blade template adalah:

    • A. .php
    • B. .html
    • C. .blade.php
    • D. .view.php

Soal Essay:

  1. Sebutkan dan jelaskan 3 limitasi PHP native yang dipecahkan oleh Laravel! (15 poin)

    Jawaban tersedia di dokumen kunci jawaban dosen.

  2. Jelaskan tugas masing-masing komponen MVC dengan contoh dalam sistem perpustakaan! (20 poin)

    Jawaban tersedia di dokumen kunci jawaban dosen.

  3. Jelaskan alur yang terjadi ketika user mengakses URL /buku/5 sampai halaman tampil! (15 poin)

    Jawaban tersedia di dokumen kunci jawaban dosen.

  4. Sebutkan dan jelaskan 5 command Artisan yang penting beserta fungsinya! (10 poin)

    Jawaban tersedia di dokumen kunci jawaban dosen.

  5. Apa perbedaan Route Closure dan Route Controller? Mana yang lebih baik dan mengapa? (10 poin)

    Jawaban tersedia di dokumen kunci jawaban dosen.


2. Checklist Kompetensi

Self-Assessment:

NoKompetensiBelumCukupMahir
1Memahami limitasi PHP native○○○
2Memahami konsep framework○○○
3Memahami arsitektur MVC○○○
4Menginstall Composer○○○
5Menginstall Laravel○○○
6Konfigurasi .env○○○
7Menjalankan php artisan serve○○○
8Memahami struktur folder Laravel○○○
9Membuat routing○○○
10Membuat view Blade○○○
11Membuat controller○○○
12Passing data ke view○○○

Target: Minimal "Cukup" untuk semua poin sebelum lanjut ke pertemuan 10.


G. REFERENSI

1. Dokumentasi Resmi

2. Tutorial Online

3. Video Tutorial Indonesia

  • Web Programming UNPAS - Laravel (YouTube)
  • Parsinta - Laravel Indonesia (YouTube)
  • Kawan Koding - Laravel Tutorial (YouTube)

4. Buku Referensi

  • "Laravel: Up & Running" - Matt Stauffer
  • "Laravel: From Apprentice to Artisan" - Taylor Otwell

5. Community

  • Laravel Indonesia Facebook Group
  • Laravel Discord Server
  • Stack Overflow (tag: laravel)

H. CATATAN PENTING

Untuk Mahasiswa:

1. Best Practices Laravel

✅ DO:

// Gunakan Controller, bukan Closure
Route::get('/buku', [BukuController::class, 'index']);
 
// Named routes
Route::get('/buku/{id}', [BukuController::class, 'show'])->name('buku.show');
 
// Compact untuk passing data
return view('buku.index', compact('buku_list'));
 
// Blade directives
@foreach ($items as $item)
    {{ $item->name }}
@endforeach

❌ DON'T:

// Jangan logic panjang di routes
Route::get('/buku', function () {
    // 50 baris code...
});
 
// Jangan campur PHP dan Blade
@foreach ($items as $item)
    <?php echo $item->name; ?>
@endforeach
 
// Jangan hardcode URL
<a href="/buku/5">Detail</a>
// Gunakan: <a href="{{ route('buku.show', 5) }}">Detail</a>

2. Common Issues & Solutions

❌ Error: "composer not found"

# Restart CMD/Terminal
# Atau tambahkan ke PATH

❌ Error: "Failed to download"

# Cek internet
composer create-project laravel/laravel perpustakaan --prefer-dist

❌ Error: "Port 8000 already in use"

php artisan serve --port=8080

❌ Error: "Migration failed"

  • Cek .env file
  • Pastikan database exists
  • Cek MySQL running

❌ Error: "View not found"

  • Cek nama file view
  • Cek folder path
  • Case sensitive!

❌ Error: "Class not found"

composer dump-autoload

3. Development Workflow

1. Install Laravel
   ↓
2. Configure .env
   ↓
3. Create database
   ↓
4. Run migrations
   ↓
5. Create routes
   ↓
6. Create controller
   ↓
7. Create views
   ↓
8. Test functionality
   ↓
9. Commit to Git

4. Debugging Tips

// dd() - Dump and Die
dd($buku_list);
 
// dump() - Dump tapi tidak die
dump($buku_list);
 
// Log untuk debugging
\Log::info('Debug info:', ['data' => $buku_list]);
 
// Artisan tinker untuk testing
php artisan tinker
>>> $user = User::first();
>>> $user->name

5. Folder Permission (Linux/Mac)

chmod -R 775 storage
chmod -R 775 bootstrap/cache

6. Git Ignore

Laravel sudah include .gitignore:

/vendor
/node_modules
.env

Jangan commit:

  • vendor/ (install via composer)
  • .env (konfigurasi lokal)
  • node_modules/

I. PERSIAPAN PERTEMUAN 10

Topik Pertemuan 10: Database dengan Migration & Model

Preview Materi:

  1. Database migration concept
  2. Membuat migration untuk tabel buku
  3. Laravel Eloquent ORM
  4. Membuat Model Buku
  5. Relasi antar model
  6. Database seeding

Yang Perlu Disiapkan:

  1. Laravel sudah terinstall (dari pertemuan ini)
  2. Database perpustakaan_laravel sudah dibuat
  3. Pahami konsep MVC
  4. Review materi pertemuan 6 (MySQL)

Preview Command:

# Membuat migration
php artisan make:migration create_buku_table
 
# Membuat model
php artisan make:model Buku
 
# Jalankan migration
php artisan migrate
 
# Rollback migration
php artisan migrate:rollback

Yang Akan Dipelajari:

  • Tidak lagi manual buat tabel di phpMyAdmin
  • Semua schema database dalam bentuk code (migration)
  • Query tidak lagi pakai mysqli, tapi Eloquent ORM
  • Model sebagai representasi tabel

Pre-reading:


Selamat Belajar Laravel! 🚀

"Laravel makes web development an enjoyable and creative experience."

  • Taylor Otwell

End of Module - Pertemuan 9

Next: Pertemuan 10 - Database dengan Migration & Model