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
| Aspek | Keterangan |
|---|---|
| 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-CPMK | Sub-CPMK05.1.1: Mampu menjelaskan konsep framework dan arsitektur MVC |
| Indikator Pencapaian | Mahasiswa 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
- Memahami kenapa framework diperlukan dalam pengembangan web
- Dapat menginstall dan konfigurasi Laravel
- Memahami konsep MVC yang digunakan di banyak framework
- Siap mengembangkan aplikasi web yang scalable dan maintainable
- 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 implement5. 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 sendirib. 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?
- Expressive & Elegant Syntax - code yang mudah dibaca
- MVC Architecture - struktur yang jelas
- Built-in Features - banyak fitur siap pakai
- Large Community - banyak tutorial dan package
- Documentation - dokumentasi sangat lengkap
- Job Opportunities - banyak dicari perusahaan
b. Versi Laravel
| Versi | Release | PHP Min | Status |
|---|---|---|---|
| Laravel 8 | Sept 2020 | 7.3 | Maintenance |
| Laravel 9 | Feb 2022 | 8.0 | Maintenance |
| Laravel 10 | Feb 2023 | 8.1 | Maintenance |
| Laravel 11 | Q1 2024 | 8.2 | Development |
| Laravel 12 | Feb 2025 | 8.2 | Development |
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>
@endforeach3. 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:auth6. 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
âŧ
Browserb. 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 HTMLd. 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 aja4. 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 terpisah4. 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 configb. Folder Penting
1. app/ - Aplikasi Utama
app/
âââ Http/
â âââ Controllers/ # â Controller
â âââ Middleware/ # Middleware
âââ Models/ # â Model
âââ Providers/ # Service providers2. resources/ - Resource Files
resources/
âââ views/ # â Blade templates (View)
âââ css/ # CSS source
âââ js/ # JS source3. routes/ - Routing
routes/
âââ web.php # â Web routes (paling sering dipakai)
âââ api.php # API routes
âââ console.php # Console commands4. database/ - Database
database/
âââ migrations/ # â Database migrations
âââ seeders/ # Database seeders
âââ factories/ # Model factories5. public/ - Public Access
public/
âââ index.php # Entry point
âââ css/ # Compiled CSS
âââ js/ # Compiled JS
âââ images/ # Images6. config/ - Konfigurasi
config/
âââ app.php # App config
âââ database.php # Database config
âââ ... # Other configsc. 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 migration5. 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: 52. Optional Parameter:
Route::get('/kategori/{nama?}', function ($nama = 'Semua') {
return "Kategori: " . $nama;
});
// URL: /kategori
// Output: Kategori: Semua
// URL: /kategori/Programming
// Output: Kategori: Programming3. 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 2024d. 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/5e. 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>
@endif2. Foreach Loop:
@foreach ($buku_list as $buku)
<li>{{ $buku->judul }}</li>
@endforeach3. For Loop:
@for ($i = 1; $i <= 10; $i++)
<p>Buku ke-{{ $i }}</p>
@endfor4. While Loop:
@while ($stok > 0)
<p>Stok: {{ $stok-- }}</p>
@endwhile5. Empty Check:
@empty($buku_list)
<p>Tidak ada buku</p>
@endempty6. Isset Check:
@isset($buku)
<p>{{ $buku->judul }}</p>
@endissetd. 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 -->
@endsection7. Artisan CLI
a. Apa itu Artisan?
Artisan adalah command-line interface Laravel untuk mempermudah development.
Cara Menggunakan:
php artisan command:nameb. Command Penting
1. Server:
php artisan serve
# Jalankan development server di localhost:8000
php artisan serve --port=8080
# Jalankan di port 80802. 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 request3. 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 seeder4. Route:
php artisan route:list
# Lihat semua route
php artisan route:cache
# Cache route untuk performance5. Cache:
php artisan cache:clear
# Clear application cache
php artisan config:clear
# Clear config cache
php artisan view:clear
# Clear compiled views6. Tinker:
php artisan tinker
# Interactive shell untuk testing code8. 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:
- Download dari https://getcomposer.org/ (opens in a new tab)
- Install Composer-Setup.exe
- Ikuti wizard instalasi
- Restart CMD/Terminal
- Cek:
composer --version
Mac/Linux:
curl -sS https://getcomposer.org/installer | <?php
sudo mv composer.phar /usr/local/bin/composer
composer --versionc. Command Penting
composer install
# Update dependencies
composer update
# Add package
composer require vendor/package
# Remove package
composer remove vendor/package
# Regenerate autoload
composer dump-autoloadd. 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
- Menginstall Composer dan Laravel
- Membuat project Laravel pertama
- Konfigurasi environment Laravel
- Menjalankan development server
- Memahami struktur folder Laravel
- Membuat routing sederhana
- Membuat view dengan Blade
- Membuat controller pertama
2. PRAKTIKUM 1: Instalasi Composer
Tujuan
Menginstall Composer sebagai dependency manager PHP.
Langkah-langkah
a. Download Composer
- Buka browser: https://getcomposer.org/ (opens in a new tab)
- Klik "Download"
- Download Composer-Setup.exe (untuk Windows)
b. Install Composer
- Jalankan file Composer-Setup.exe
- 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
- Buka CMD atau Terminal
- Jalankan:
composer --version- Output yang diharapkan:
Composer version 2.6.x (atau lebih baru)d. Testing Composer
# Cek command yang tersedia
composer list
# Cek diagnose
composer diagnoseTroubleshooting:
â 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
- Buka CMD/Terminal
- Navigate ke folder htdocs:
cd C:\xampp\htdocs- Install Laravel:
composer create-project laravel/laravel perpustakaan- 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.jsonc. Verifikasi Instalasi
- Navigate ke folder project:
cd perpustakaan- Cek versi Laravel:
php artisan --version- Output:
Laravel Framework 12.x.xTroubleshooting:
â 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
- Buka folder project:
C:\xampp\htdocs\perpustakaan - Buka file
.envdengan text editor - 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
- Start Apache & MySQL di XAMPP
- Buka phpMyAdmin: http://localhost/phpmyadmin (opens in a new tab)
- Buat database baru:
perpustakaan_laravel - Collation:
utf8mb4_unicode_ci
c. Test Koneksi Database
- Buka CMD di folder project
- Jalankan:
php artisan migrate- Jika berhasil:
Migration table created successfully.
Migrating: xxxx_create_users_table
Migrated: xxxx_create_users_table
...- Cek di phpMyAdmin - akan ada tabel:
- migrations
- users
- password_resets
- failed_jobs
- personal_access_tokens
d. Generate Application Key
php artisan key:generateOutput:
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
- Buka CMD di folder project
- Jalankan:
php artisan serve- Output:
INFO Server running on [http://127.0.0.1:8000].
Press Ctrl+C to stop the serverb. Akses Aplikasi
- Buka browser
- Akses: http://localhost:8000 (opens in a new tab)
- Akan muncul Laravel Welcome Page
![Laravel Welcome Page]
- Logo Laravel
- Links: Documentation, Laracasts, News, etc.
- PHP Version info
- Laravel Version info
c. Testing Routes
-
Coba akses: http://localhost:8000/ (opens in a new tab) â Welcome page
-
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=8080Akses: 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/
- Buka folder:
perpustakaan/app/ - Struktur:
app/
âââ Console/
âââ Exceptions/
âââ Http/
â âââ Controllers/ # â Controller
â â âââ Controller.php
â âââ Middleware/
â âââ Kernel.php
âââ Models/ # â Model
â âââ User.php
âââ Providers/- 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/
- Buka folder:
perpustakaan/resources/ - Struktur:
resources/
âââ css/
â âââ app.css
âââ js/
â âââ app.js
âââ views/ # â Blade Views
âââ welcome.blade.php- 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/
- Buka folder:
perpustakaan/routes/ - File penting:
web.php - Isi awal:
<?php
use Illuminate\Support\Facades\Route;
Route::get('/', function () {
return view('welcome');
});d. Eksplorasi Folder public/
- Buka folder:
perpustakaan/public/ - Struktur:
public/
âââ index.php # Entry point
âââ .htaccess
âââ favicon.ico
âââ robots.txt- File
index.phpadalah entry point aplikasi
e. Eksplorasi Folder database/
- Buka folder:
perpustakaan/database/ - Struktur:
database/
âââ factories/
â âââ UserFactory.php
âââ migrations/ # â Database migrations
â âââ xxxx_create_users_table.php
â âââ xxxx_create_password_resets_table.php
âââ seeders/
âââ DatabaseSeeder.php- 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:
| Folder | Fungsi |
|---|---|
| app/Models/ | Tempat Model (Database) |
| app/Http/Controllers/ | Tempat Controller |
| resources/views/ | Tempat View (Blade) |
| routes/web.php | Define route |
| database/migrations/ | Database schema |
| public/ | Public access |
| .env | Configuration |
7. PRAKTIKUM 6: Routing Sederhana
Tujuan
Membuat berbagai jenis route di Laravel.
Langkah-langkah
a. Route Closure Sederhana
- Buka file
routes/web.php - 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
];
});- 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";
});- Testing:
- http://localhost:8000/buku/5 (opens in a new tab) â "Detail buku dengan ID: 5"
- http://localhost:8000/kategori (opens in a new tab) â "Menampilkan kategori: Semua Kategori"
- http://localhost:8000/kategori/Programming (opens in a new tab) â "Menampilkan kategori: Programming"
- http://localhost:8000/search/Programming/Laravel (opens in a new tab) â "Cari buku kategori: Programming dengan keyword: Laravel"
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:listOutput:
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
- Buat folder:
resources/views/perpustakaan/ - 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
- Akses: http://localhost:8000/perpustakaan (opens in a new tab)
- 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 foreach9. PRAKTIKUM 8: Membuat Controller Pertama
Tujuan
Membuat controller untuk mengelola logic aplikasi (implementasi MVC).
Langkah-langkah
a. Generate Controller
- Buka CMD di folder project
- Generate controller:
php artisan make:controller PerpustakaanController- Output:
INFO Controller [app/Http/Controllers/PerpustakaanController.php] created successfully.b. Edit Controller
- Buka file:
app/Http/Controllers/PerpustakaanController.php - 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
-
Akses halaman index:
- http://localhost:8000/perpustakaan (opens in a new tab)
- Sama seperti sebelumnya, tapi sekarang via Controller
-
Akses detail buku:
- http://localhost:8000/buku/1 (opens in a new tab) â Detail Pemrograman PHP
- http://localhost:8000/buku/2 (opens in a new tab) â Detail Laravel Framework
- http://localhost:8000/buku/999 (opens in a new tab) â 404 Not Found
-
Lihat route list:
php artisan route:listf. 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 HTMLKesimpulan: â 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:
- Buat route di
routes/web.php:
Route::get('/anggota', function () {
// Data anggota
});
Route::get('/anggota/{id}', function ($id) {
// Detail anggota
});-
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
-
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
];- Buat view
resources/views/anggota/show.blade.php:- Detail lengkap anggota
- Card Bootstrap dengan informasi:
- Kode Anggota
- Nama Lengkap
- 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:
- Generate Controller:
php artisan make:controller KategoriController- 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
}-
Buat 3 view:
resources/views/kategori/index.blade.phpresources/views/kategori/show.blade.phpresources/views/kategori/search.blade.php
-
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:
-
MVC adalah singkatan dari:
- A. Model View Creator
- B. Model View Controller
- C. Model Visual Controller
- D. Multiple View Controller
-
File konfigurasi environment Laravel adalah:
- A. config.php
- B. .env
- C. environment.php
- D. setting.php
-
Command untuk menjalankan Laravel development server:
- A. php artisan run
- B. php artisan start
- C. php artisan serve
- D. php artisan launch
-
Dalam MVC, yang bertugas berkomunikasi dengan database adalah:
- A. View
- B. Controller
- C. Model
- D. Route
-
File route untuk web ada di:
- A. app/routes.php
- B. routes/web.php
- C. config/routes.php
- D. public/routes.php
-
Sintaks Blade untuk echo data adalah:
- A.
`<?php echo $var ?>` - B.
`<%= $var %>` - C.
`{{ $var }}` - D.
`{# $var #}`
- A.
-
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
-
Composer adalah:
- A. Text editor untuk PHP
- B. Web server
- C. Dependency manager untuk PHP
- D. Database management tool
-
Folder untuk menyimpan view Blade adalah:
- A. app/views
- B. resources/views
- C. public/views
- D. storage/views
-
Extension file Blade template adalah:
- A. .php
- B. .html
- C. .blade.php
- D. .view.php
Soal Essay:
-
Sebutkan dan jelaskan 3 limitasi PHP native yang dipecahkan oleh Laravel! (15 poin)
Jawaban tersedia di dokumen kunci jawaban dosen.
-
Jelaskan tugas masing-masing komponen MVC dengan contoh dalam sistem perpustakaan! (20 poin)
Jawaban tersedia di dokumen kunci jawaban dosen.
-
Jelaskan alur yang terjadi ketika user mengakses URL
/buku/5sampai halaman tampil! (15 poin)Jawaban tersedia di dokumen kunci jawaban dosen.
-
Sebutkan dan jelaskan 5 command Artisan yang penting beserta fungsinya! (10 poin)
Jawaban tersedia di dokumen kunci jawaban dosen.
-
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:
| No | Kompetensi | Belum | Cukup | Mahir |
|---|---|---|---|---|
| 1 | Memahami limitasi PHP native | â | â | â |
| 2 | Memahami konsep framework | â | â | â |
| 3 | Memahami arsitektur MVC | â | â | â |
| 4 | Menginstall Composer | â | â | â |
| 5 | Menginstall Laravel | â | â | â |
| 6 | Konfigurasi .env | â | â | â |
| 7 | Menjalankan php artisan serve | â | â | â |
| 8 | Memahami struktur folder Laravel | â | â | â |
| 9 | Membuat routing | â | â | â |
| 10 | Membuat view Blade | â | â | â |
| 11 | Membuat controller | â | â | â |
| 12 | Passing data ke view | â | â | â |
Target: Minimal "Cukup" untuk semua poin sebelum lanjut ke pertemuan 10.
G. REFERENSI
1. Dokumentasi Resmi
- Laravel Documentation: https://laravel.com/docs/12.x (opens in a new tab)
- Laravel Routing: https://laravel.com/docs/12.x/routing (opens in a new tab)
- Blade Templates: https://laravel.com/docs/12.x/blade (opens in a new tab)
- Controllers: https://laravel.com/docs/12.x/controllers (opens in a new tab)
2. Tutorial Online
- Laracasts (Video): https://laracasts.com/series/laravel-10-from-scratch (opens in a new tab)
- Laravel News: https://laravel-news.com/ (opens in a new tab)
- Laravel Daily: https://laraveldaily.com/ (opens in a new tab)
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-autoload3. 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 Git4. 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->name5. Folder Permission (Linux/Mac)
chmod -R 775 storage
chmod -R 775 bootstrap/cache6. Git Ignore
Laravel sudah include .gitignore:
/vendor
/node_modules
.envJangan commit:
- vendor/ (install via composer)
- .env (konfigurasi lokal)
- node_modules/
I. PERSIAPAN PERTEMUAN 10
Topik Pertemuan 10: Database dengan Migration & Model
Preview Materi:
- Database migration concept
- Membuat migration untuk tabel buku
- Laravel Eloquent ORM
- Membuat Model Buku
- Relasi antar model
- Database seeding
Yang Perlu Disiapkan:
- Laravel sudah terinstall (dari pertemuan ini)
- Database
perpustakaan_laravelsudah dibuat - Pahami konsep MVC
- 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:rollbackYang 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:
- Laravel Migrations: https://laravel.com/docs/10.x/migrations (opens in a new tab)
- Eloquent ORM: https://laravel.com/docs/10.x/eloquent (opens in a new tab)
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