Master Laravel: Pelajari 3 Proyek Nyata untuk Keahlian Profesional
Pengantar Laravel
Laravel adalah framework PHP yang sangat populer dan powerful untuk membangun aplikasi web modern. Dengan sintaks yang elegan dan fitur lengkap, Laravel memudahkan pengembang dalam membuat aplikasi yang scalable, aman, dan mudah dipelihara.
Dalam ebook ini, Anda akan belajar Laravel melalui 3 proyek nyata yang akan membimbing Anda dari dasar hingga mahir. Setiap proyek dilengkapi dengan penjelasan step-by-step, source code, dan referensi pembelajaran tambahan.
Persiapan Lingkungan dan Instalasi
Sebelum memulai pengembangan dengan Laravel, pastikan Anda sudah menyiapkan lingkungan pengembangan yang sesuai. Berikut langkah-langkahnya:
-
Install PHP (versi 8.0 ke atas)
- Laravel membutuhkan PHP versi terbaru untuk fitur dan performa terbaik.
-
Install Composer
- Composer adalah dependency manager untuk PHP yang digunakan untuk mengelola paket Laravel.
-
Install Laravel via Composer
- Jalankan perintah
composer create-project laravel/laravel nama-proyek
untuk membuat proyek baru.
-
Setup Database
- Laravel mendukung berbagai database seperti MySQL, PostgreSQL, SQLite. Pastikan database sudah siap dan konfigurasi di
.env
sudah benar.
-
Jalankan Server Development
- Gunakan perintah
php artisan serve
untuk menjalankan server lokal.
Proyek 1: Blog Sederhana
Tujuan
Membuat aplikasi blog sederhana yang memungkinkan pengguna membuat, membaca, mengedit, dan menghapus artikel.
Langkah 1: Membuat Model dan Migrasi
Buat model
Post
beserta migrasi untuk tabel posts:
php artisan make:model Post -m
Edit file migrasi di
database/migrations/xxxx_xx_xx_create_posts_table.php
:
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('content');
$table->timestamps();
});
}
Jalankan migrasi:
php artisan migrate
Langkah 2: Membuat Controller dan Route
Buat controller resource untuk Post:
php artisan make:controller PostController --resource
Tambahkan route resource di
routes/web.php
:
use App\Http\Controllers\PostController;
Route::resource('posts', PostController::class);
Langkah 3: Implementasi CRUD di Controller
Contoh method
index
dan
store
di
PostController.php
:
public function index()
{
$posts = Post::latest()->paginate(10);
return view('posts.index', compact('posts'));
}
public function store(Request $request)
{
$request->validate([
'title' => 'required|max:255',
'content' => 'required',
]);
Post::create($request->all());
return redirect()->route('posts.index')->with('success', 'Post created successfully.');
}
Langkah 4: Membuat View Blade
Contoh sederhana file
resources/views/posts/index.blade.php
:
@extends('layouts.app')
@section('content')
<div class=""container mx-auto p-4"">
<h1 class=""text-3xl font-bold mb-6"">Daftar Post</h1>
<a href=""{{ route('posts.create') }}"" class=""bg-indigo-600 text-white px-4 py-2 rounded hover:bg-indigo-700"">Buat Post Baru</a>
@if(session('success'))
<div class=""mt-4 p-3 bg-green-200 text-green-800 rounded"">{{ session('success') }}</div>
@endif
<ul class=""mt-6 space-y-4"">
@foreach($posts as $post)
<li class=""border p-4 rounded shadow-sm"">
<h2 class=""text-xl font-semibold"">{{ $post->title }}</h2>
<p class=""mt-2"">{{ Str::limit($post->content, 150) }}</p>
<a href=""{{ route('posts.show', $post) }}"" class=""text-indigo-600 hover:underline"">Baca Selengkapnya</a>
</li>
@endforeach
</ul>
<div class=""mt-6"">{{ $posts->links() }}</div>
</div>
@endsection
Proyek 2: Sistem Manajemen Tugas
Tujuan
Membuat aplikasi manajemen tugas yang memungkinkan pengguna menambah, mengedit, menandai selesai, dan menghapus tugas.
Langkah 1: Membuat Model dan Migrasi
Buat model
Task
dan migrasi:
php artisan make:model Task -m
Edit migrasi di
database/migrations/xxxx_xx_xx_create_tasks_table.php
:
public function up()
{
Schema::create('tasks', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->boolean('is_completed')->default(false);
$table->timestamps();
});
}
Jalankan migrasi:
php artisan migrate
Langkah 2: Membuat Controller dan Route
Buat controller resource untuk Task:
php artisan make:controller TaskController --resource
Tambahkan route resource di
routes/web.php
:
use App\Http\Controllers\TaskController;
Route::resource('tasks', TaskController::class);
Langkah 3: Implementasi CRUD dan Toggle Status
Contoh method
update
dan method tambahan untuk toggle status selesai:
public function update(Request $request, Task $task)
{
$request->validate([
'title' => 'required|max:255',
]);
$task->update($request->all());
return redirect()->route('tasks.index')->with('success', 'Task updated successfully.');
}
public function toggle(Task $task)
{
$task->is_completed = ! $task->is_completed;
$task->save();
return redirect()->route('tasks.index');
}
Tambahkan route untuk toggle status di
routes/web.php
:
Route::patch('tasks/{task}/toggle', [TaskController::class, 'toggle'])->name('tasks.toggle');
Langkah 4: Membuat View Blade
Contoh file
resources/views/tasks/index.blade.php
:
@extends('layouts.app')
@section('content')
<div class=""container mx-auto p-4"">
<h1 class=""text-3xl font-bold mb-6"">Daftar Tugas</h1>
<a href=""{{ route('tasks.create') }}"" class=""bg-indigo-600 text-white px-4 py-2 rounded hover:bg-indigo-700"">Tambah Tugas</a>
@if(session('success'))
<div class=""mt-4 p-3 bg-green-200 text-green-800 rounded"">{{ session('success') }}</div>
@endif
<ul class=""mt-6 space-y-4"">
@foreach($tasks as $task)
<li class=""border p-4 rounded shadow-sm flex justify-between items-center"">
<div>
<form action=""{{ route('tasks.toggle', $task) }}"" method=""POST"" class=""inline"">
@csrf
@method('PATCH')
<button type=""submit"" class=""mr-3"">
@if($task->is_completed)
<i class=""fas fa-check-circle text-green-500""></i>
@else
<i class=""far fa-circle text-gray-400""></i>
@endif
</button>
</form>
<span class=""{{ $task->is_completed ? 'line-through text-gray-500' : '' }}"">{{ $task->title }}</span>
</div>
<div>
<a href=""{{ route('tasks.edit', $task) }}"" class=""text-indigo-600 hover:underline mr-4"">Edit</a>
<form action=""{{ route('tasks.destroy', $task) }}"" method=""POST"" class=""inline"">
@csrf
@method('DELETE')
<button type=""submit"" class=""text-red-600 hover:underline"">Hapus</button>
</form>
</div>
</li>
@endforeach
</ul>
<div class=""mt-6"">{{ $tasks->links() }}</div>
</div>
@endsection
Proyek 3: E-Commerce Mini
Tujuan
Membuat aplikasi e-commerce mini yang memungkinkan pengguna melihat produk, menambah ke keranjang, dan melakukan checkout sederhana.
Langkah 1: Membuat Model dan Migrasi Produk
Buat model
Product
dan migrasi:
php artisan make:model Product -m
Edit migrasi di
database/migrations/xxxx_xx_xx_create_products_table.php
:
public function up()
{
Schema::create('products', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->text('description')->nullable();
$table->decimal('price', 10, 2);
$table->string('image_url')->nullable();
$table->timestamps();
});
}
Jalankan migrasi:
php artisan migrate
Langkah 2: Membuat Controller dan Route
Buat controller resource untuk Product:
php artisan make:controller ProductController --resource
Tambahkan route resource di
routes/web.php
:
use App\Http\Controllers\ProductController;
Route::resource('products', ProductController::class);
Langkah 3: Implementasi Controller
Contoh method
index
dan
show
di
ProductController.php
:
public function index()
{
$products = Product::paginate(12);
return view('products.index', compact('products'));
}
public function show(Product $product)
{
return view('products.show', compact('product'));
}
Langkah 4: Membuat View Produk
Contoh file
resources/views/products/index.blade.php
:
@extends('layouts.app')
@section('content')
<div class=""container mx-auto p-4"">
<h1 class=""text-3xl font-bold mb-6"">Daftar Produk</h1>
<div class=""grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 gap-6"">
@foreach($products as $product)
<div class=""border rounded shadow p-4 flex flex-col"">
<img src=""{{ $product->image_url ?? 'https://placehold.co/400x300/png?text=No+Image' }}"" alt=""Gambar produk {{ $product->name }}"" class=""mb-4 rounded"">
<h2 class=""text-xl font-semibold mb-2"">{{ $product->name }}</h2>
<p class=""mb-4 text-gray-700 flex-grow"">{{ Str::limit($product->description, 100) }}</p>
<div class=""text-lg font-bold mb-4"">Rp {{ number_format($product->price, 0, ',', '.') }}</div>
<a href=""{{ route('products.show', $product) }}"" class=""bg-indigo-600 text-white px-4 py-2 rounded hover:bg-indigo-700 text-center"">Lihat Detail</a>
</div>
@endforeach
</div>
<div class=""mt-6"">{{ $products->links() }}</div>
</div>
@endsection
Sumber Belajar dan Source Code
Berikut beberapa sumber belajar dan channel yang sangat membantu untuk menguasai Laravel secara mendalam:
Source Code Proyek
Anda dapat mengunduh source code lengkap dari ketiga proyek ini di GitHub berikut: