Pada artikel ini, kita akan belajar membuat website perpustakaan online dengan fitur login dan register menggunakan Laravel 11, MySQL 8, dan Breeze. Website ini akan memiliki beberapa fitur utama seperti pencarian buku berdasarkan kategori, melihat detail buku, peminjaman buku (hanya bisa dilakukan setelah login), dan pengelolaan stok buku oleh admin.
Fitur Utama Website Perpustakaan Online
Beberapa fitur utama yang akan kita bangun dalam proyek ini meliputi:
- Pencarian buku berdasarkan kategori: Pengguna dapat mencari buku dengan memilih kategori tertentu.
- Melihat detail buku: Setiap buku akan memiliki halaman detail yang memuat informasi lengkap seperti judul, penulis, deskripsi, dan ketersediaan stok.
- Peminjaman buku (wajib login): Pengguna yang telah login bisa meminjam buku, sedangkan pengguna yang belum login akan diarahkan ke halaman login.
- Pengelolaan stok buku: Admin memiliki akses untuk menambah, mengedit, dan menghapus buku serta mengelola stok buku.
Instalasi PHP, MySQL, Composer, dan MAMP
Sebelum memulai proyek Laravel, ada beberapa perangkat yang perlu diinstal terlebih dahulu. Berikut langkah-langkah untuk menginstalnya:
1. Instalasi PHP
Laravel membutuhkan PHP minimal versi 8.0. Untuk memeriksa apakah PHP sudah terinstal di komputer kamu, buka terminal atau command prompt dan ketik:
php -v
Jika belum ada PHP, kamu bisa mendownload dan menginstal MAMP. MAMP adalah software yang menyediakan lingkungan web development yang sudah termasuk PHP dan MySQL.
2. Instalasi MySQL
MySQL adalah database yang akan kita gunakan untuk menyimpan data buku, pengguna, dan peminjaman. Setelah MAMP terinstal, MySQL biasanya sudah otomatis terinstal juga. Untuk memeriksa, buka MAMP dan pastikan server MySQL aktif.
3. Instalasi Composer
Composer adalah package manager untuk PHP yang akan kita gunakan untuk menginstal Laravel. Untuk menginstal Composer, kunjungi situs resmi Composer dan ikuti instruksi instalasi yang sesuai dengan sistem operasi kamu.
Setelah Composer terinstal, periksa instalasinya dengan menjalankan perintah berikut di terminal:
composer -v
Jika Composer sudah terinstal dengan benar, kamu akan melihat versi Composer yang terpasang.
4. Menginstal MAMP
MAMP adalah software yang menyatukan Apache, PHP, dan MySQL dalam satu paket. Untuk menginstalnya:
- Download MAMP dari situs resmi MAMP.
- Setelah download selesai, lakukan instalasi seperti software biasa.
- Jalankan MAMP, dan pastikan server Apache dan MySQL aktif.
Dengan menggunakan MAMP, kita tidak perlu mengkonfigurasi MySQL secara manual karena sudah terintegrasi dengan MAMP.
Cara Membuat Proyek Laravel dan Menginstal Laravel Breeze
Setelah semua perangkat terinstal (PHP, MySQL, Composer, dan MAMP), kita bisa mulai membuat proyek Laravel untuk website perpustakaan online.
1. Membuat Proyek Laravel
Untuk membuat proyek Laravel, buka terminal atau command prompt dan jalankan perintah berikut:
composer create-project laravel/laravel perpustakaan_online
Perintah ini akan mengunduh dan menginstal Laravel versi terbaru. Setelah selesai, masuk ke direktori proyek:
cd perpustakaan_online
2. Mengonfigurasi Environment
Sebelum melanjutkan, kita harus mengonfigurasi file .env
untuk menghubungkan aplikasi ke database. Cari file .env
di root direktori proyek, lalu ubah pengaturan berikut sesuai dengan konfigurasi database MySQL yang telah dibuat:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=perpustakaan_db
DB_USERNAME=root
DB_PASSWORD=
3. Menginstal Laravel Breeze
Laravel Breeze digunakan untuk menyediakan sistem otentikasi yang sederhana namun efektif. Untuk menginstal Breeze, jalankan perintah berikut di terminal:
composer require laravel/breeze --dev
Setelah instalasi selesai, jalankan perintah untuk menginstal file Breeze:
php artisan breeze:install
Kemudian jalankan migrasi dan npm untuk membangun file frontend:
php artisan migrate
npm install
npm run dev
Breeze sekarang telah diinstal dan sistem login/register siap digunakan di website perpustakaan online.
Cara Membuat Migration untuk Tabel books
, categories
, borrowers
, loans
, dan returns
Setelah sistem otentikasi siap, kita akan membuat database untuk menyimpan data buku, kategori, peminjam, pinjaman, dan pengembalian.
1. Membuat Migration Tabel books
Untuk membuat migration tabel books
, jalankan perintah:
php artisan make:migration create_books_table
Kemudian, buka file migrasi di direktori database/migrations
dan tambahkan skema berikut:
Schema::create('books', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->string('author');
$table->text('description')->nullable();
$table->integer('stock');
$table->unsignedBigInteger('category_id');
$table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade');
$table->timestamps();
});
2. Membuat Migration Tabel categories
Untuk membuat migration tabel categories
, jalankan perintah:
php artisan make:migration create_categories_table
Kemudian tambahkan skema berikut:
Schema::create('categories', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->timestamps();
});
3. Membuat Migration Tabel borrowers
Jalankan perintah berikut untuk membuat migration tabel borrowers
:
php artisan make:migration create_borrowers_table
Tambahkan skema berikut:
Schema::create('borrowers', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->timestamps();
});
4. Membuat Migration Tabel loans
Untuk membuat tabel loans
, jalankan perintah:
php artisan make:migration create_loans_table
Kemudian tambahkan skema:
Schema::create('loans', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('book_id');
$table->unsignedBigInteger('borrower_id');
$table->date('loan_date');
$table->date('return_date')->nullable();
$table->foreign('book_id')->references('id')->on('books')->onDelete('cascade');
$table->foreign('borrower_id')->references('id')->on('borrowers')->onDelete('cascade');
$table->timestamps();
});
5. Membuat Migration Tabel returns
Untuk membuat tabel returns
, jalankan perintah:
php artisan make:migration create_returns_table
Tambahkan skema berikut:
Schema::create('returns', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('loan_id');
$table->date('returned_at');
$table->foreign('loan_id')->references('id')->on('loans')->onDelete('cascade');
$table->timestamps();
});
Cara Membuat Model dengan Fillable Mass Assignment dan ORM Relationships
Setelah membuat migration, kita akan membuat model yang mewakili masing-masing tabel dan mengatur fillable serta relasi antar tabel menggunakan ORM (Object-Relational Mapping) di Laravel.
1. Model Book
Buat model untuk tabel books
dengan perintah:
php artisan make:model Book
Kemudian tambahkan fillable dan relasi belongsTo dengan Category
, serta relasi hasMany dengan Loan
:
class Book extends Model
{
protected $fillable = ['title', 'author', 'description', 'stock', 'category_id'];
public function category()
{
return $this->belongsTo(Category::class);
}
public function loans()
{
return $this->hasMany(Loan::class);
}
}
2. Model Category
Buat model untuk tabel categories
dengan perintah:
php artisan make:model Category
Tambahkan fillable dan relasi hasMany dengan Book
:
class Category extends Model
{
protected $fillable = ['name'];
public function books()
{
return $this->hasMany(Book::class);
}
}
3. Model Borrower
Buat model untuk tabel borrowers
dengan perintah:
php artisan make:model Borrower
Tambahkan fillable dan relasi belongsTo dengan User
, serta relasi hasMany dengan Loan
:
class Borrower extends Model
{
protected $fillable = ['user_id'];
public function user()
{
return $this->belongsTo(User::class);
}
public function loans()
{
return $this->hasMany(Loan::class);
}
}
4. Model Loan
Buat model untuk tabel loans
dengan perintah:
php artisan make:model Loan
Tambahkan fillable dan relasi belongsTo dengan Book
dan Borrower
, serta relasi hasOne dengan Return
:
class Loan extends Model
{
protected $fillable = ['book_id', 'borrower_id', 'loan_date', 'return_date'];
public function book()
{
return $this->belongsTo(Book::class);
}
public function borrower()
{
return $this->belongsTo(Borrower::class);
}
public function return()
{
return $this->hasOne(ReturnModel::class);
}
}
5. Model Return
Buat model untuk tabel returns
dengan perintah:
php artisan make:model ReturnModel
Tambahkan fillable dan relasi belongsTo dengan Loan
:
class ReturnModel extends Model
{
protected $fillable = ['loan_id', 'returned_at'];
public function loan()
{
return $this->belongsTo(Loan::class);
}
}
Dengan langkah-langkah di atas, kita telah membuat model beserta relasi ORM untuk tabel-tabel penting dalam website perpustakaan online.
Cara Menginstal Spatie dan Mengatur Role serta Permissions
Pada tahap ini, kita akan menggunakan package Spatie Laravel Permission untuk mengelola roles dan permissions dalam proyek website perpustakaan online. Dengan package ini, kita bisa membuat role seperti admin, librarian, dan member, serta menentukan permissions untuk setiap role, misalnya mengelola buku, meminjam buku, dan mengelola anggota.
Berikut langkah-langkah instalasi dan pengaturan Spatie Permission.
1. Instalasi Spatie Laravel Permission
Langkah pertama adalah menginstal package Spatie Permission. Jalankan perintah berikut di terminal:
composer require spatie/laravel-permission
Setelah itu, publikasikan konfigurasi dan migration bawaan dari Spatie dengan perintah:
php artisan vendor:publish --provider="Spatie\\\\Permission\\\\PermissionServiceProvider"
Perintah ini akan menghasilkan file konfigurasi config/permission.php
dan migration untuk tabel roles
, permissions
, dan model_has_roles
.
Kemudian jalankan migration untuk membuat tabel yang diperlukan:
php artisan migrate
2. Mengatur Model User untuk Role dan Permission
Setelah instalasi berhasil, kita perlu menambahkan trait HasRoles
ke dalam model User
agar model tersebut bisa menggunakan fitur role dan permission. Buka file app/Models/User.php
dan tambahkan HasRoles seperti berikut:
namespace App\\\\Models;
use Illuminate\\\\Foundation\\\\Auth\\\\User as Authenticatable;
use Spatie\\\\Permission\\\\Traits\\\\HasRoles;
class User extends Authenticatable
{
use HasRoles;
// Properti dan method lainnya...
}
3. Membuat Role dan Permission
Setelah model siap, kita bisa membuat role seperti admin, librarian, dan member, serta beberapa permission yang terkait. Spatie menyediakan cara mudah untuk membuat role dan permission melalui seeder atau langsung melalui tinker. Pada tutorial ini, kita akan menggunakan seeder.
a. Membuat Seeder untuk Role dan Permission
Pertama, kita buat seeder untuk menambahkan role dan permission ke dalam database. Jalankan perintah berikut untuk membuat seeder:
php artisan make:seeder RolePermissionSeeder
Kemudian, buka file seeder yang baru dibuat di direktori database/seeders/RolePermissionSeeder.php
dan tambahkan kode berikut untuk membuat role dan permission:
use Illuminate\\\\Database\\\\Seeder;
use Spatie\\\\Permission\\\\Models\\\\Role;
use Spatie\\\\Permission\\\\Models\\\\Permission;
class RolePermissionSeeder extends Seeder
{
public function run()
{
// Membuat permission
Permission::create(['name' => 'manage books']);
Permission::create(['name' => 'manage members']);
Permission::create(['name' => 'borrow books']);
// Membuat role Admin dan memberikan semua permission
$admin = Role::create(['name' => 'admin']);
$admin->givePermissionTo(Permission::all());
// Membuat role Librarian dan memberikan permission khusus
$librarian = Role::create(['name' => 'librarian']);
$librarian->givePermissionTo(['manage books', 'manage members']);
// Membuat role Member dan memberikan permission peminjaman buku
$member = Role::create(['name' => 'member']);
$member->givePermissionTo('borrow books');
}
}
Kode di atas akan membuat permission seperti manage books
, manage members
, dan borrow books
, kemudian menetapkan permission tersebut ke role yang sesuai, yaitu:
- Admin: memiliki semua permission.
- Librarian: hanya memiliki permission untuk mengelola buku dan anggota.
- Member: hanya memiliki permission untuk meminjam buku.
b. Menjalankan Seeder
Untuk menjalankan seeder dan menambahkan role serta permission ke dalam database, jalankan perintah:
php artisan db:seed --class=RolePermissionSeeder
4. Mengelola Role dan Permission di Controller
Setelah role dan permission dibuat, kita bisa menggunakannya dalam aplikasi, misalnya untuk membatasi akses ke fitur tertentu berdasarkan role.
a. Menambahkan Role ke Pengguna
Anda bisa menambahkan role ke pengguna dalam controller atau saat registrasi. Contoh, di controller RegisterController
, tambahkan pengguna yang baru terdaftar sebagai member:
use App\\\\Models\\\\User;
use Spatie\\\\Permission\\\\Models\\\\Role;
class RegisterController extends Controller
{
public function register(Request $request)
{
// Validasi dan pembuatan user
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => bcrypt($request->password),
]);
// Menambahkan role "member" ke user yang baru dibuat
$user->assignRole('member');
// Redirect atau respons lainnya
}
}
b. Membatasi Akses Berdasarkan Role
Untuk membatasi akses ke halaman atau fitur tertentu, kita bisa menggunakan middleware role
atau permission
yang disediakan oleh Spatie.
Contoh, jika ingin membatasi akses ke halaman pengelolaan buku hanya untuk admin dan librarian, tambahkan middleware di routing:
Route::middleware(['role:admin|librarian'])->group(function () {
Route::get('/manage-books', [BookController::class, 'index'])->name('manage.books');
});
Atau, jika ingin membatasi berdasarkan permission, misalnya hanya pengguna dengan permission borrow books
yang bisa meminjam buku:
Route::middleware(['permission:borrow books'])->group(function () {
Route::post('/borrow-book', [LoanController::class, 'borrow'])->name('borrow.book');
});
5. Menampilkan Role dan Permission pada Tampilan
Untuk menampilkan role atau permission pada tampilan Blade, kita bisa menggunakan directive bawaan dari Spatie seperti @role
atau @can
.
Contoh, untuk menampilkan menu pengelolaan buku hanya untuk admin dan librarian:
@role('admin|librarian')
<li><a href="{{ route('manage.books') }}">Manage Books</a></li>
@endrole
Atau, untuk menampilkan tombol pinjam buku hanya untuk pengguna yang memiliki permission borrow books
:
@can('borrow books')
<button>Pinjam Buku</button>
@endcan
Cara Membuat Blade Templates untuk CRUD Buku dan Manajemen Peminjaman Menggunakan Tailwind CDN
Pada tahap ini, kita akan membuat Blade templates untuk CRUD buku dan manajemen peminjaman di website perpustakaan online. Kita akan menggunakan Tailwind CSS CDN untuk membuat tampilan yang responsif dan modern.
1. Menambahkan Tailwind CSS CDN ke Proyek Laravel
Pertama, kita perlu menambahkan Tailwind CSS ke proyek. Buka file resources/views/layouts/app.blade.php
dan tambahkan link Tailwind CDN di dalam <head>
:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Perpustakaan Online</title>
<!-- Tailwind CSS CDN -->
<link href="<https://cdn.jsdelivr.net/npm/[email protected]/dist/tailwind.min.css>" rel="stylesheet">
</head>
<body class="bg-gray-100">
<div class="container mx-auto p-4">
@yield('content')
</div>
</body>
</html>
Dengan menambahkan Tailwind CDN, kita sekarang bisa menggunakan utility classes dari Tailwind CSS di dalam template.
2. Membuat Template CRUD Buku
Untuk memudahkan pengguna dalam mengelola buku (CRUD), kita akan membuat beberapa tampilan: halaman untuk menampilkan daftar buku, menambahkan buku, mengedit buku, dan menghapus buku.
a. Halaman Menampilkan Daftar Buku
Buat file resources/views/books/index.blade.php
untuk menampilkan daftar buku:
@extends('layouts.app')
@section('content')
<h1 class="text-2xl font-bold mb-4">Daftar Buku</h1>
<a href="{{ route('books.create') }}" class="bg-blue-500 text-white px-4 py-2 rounded-md mb-4 inline-block">Tambah Buku</a>
<table class="min-w-full bg-white rounded-lg shadow-lg">
<thead>
<tr class="w-full bg-gray-200">
<th class="py-2 px-4 text-left">Judul</th>
<th class="py-2 px-4 text-left">Penulis</th>
<th class="py-2 px-4 text-left">Stok</th>
<th class="py-2 px-4 text-left">Aksi</th>
</tr>
</thead>
<tbody>
@foreach($books as $book)
<tr class="border-b">
<td class="py-2 px-4">{{ $book->title }}</td>
<td class="py-2 px-4">{{ $book->author }}</td>
<td class="py-2 px-4">{{ $book->stock }}</td>
<td class="py-2 px-4">
<a href="{{ route('books.edit', $book->id) }}" class="text-blue-500">Edit</a>
<form action="{{ route('books.destroy', $book->id) }}" method="POST" class="inline-block">
@csrf
@method('DELETE')
<button type="submit" class="text-red-500 ml-2">Hapus</button>
</form>
</td>
</tr>
@endforeach
</tbody>
</table>
@endsection
Template ini menampilkan tabel yang memuat daftar buku, lengkap dengan aksi edit dan hapus untuk setiap buku.
b. Halaman Tambah Buku
Buat file resources/views/books/create.blade.php
untuk menambahkan buku baru:
@extends('layouts.app')
@section('content')
<h1 class="text-2xl font-bold mb-4">Tambah Buku</h1>
<form action="{{ route('books.store') }}" method="POST" class="bg-white p-6 rounded-lg shadow-lg">
@csrf
<div class="mb-4">
<label for="title" class="block text-gray-700">Judul Buku:</label>
<input type="text" id="title" name="title" class="w-full p-2 border rounded-lg" required>
</div>
<div class="mb-4">
<label for="author" class="block text-gray-700">Penulis:</label>
<input type="text" id="author" name="author" class="w-full p-2 border rounded-lg" required>
</div>
<div class="mb-4">
<label for="stock" class="block text-gray-700">Stok:</label>
<input type="number" id="stock" name="stock" class="w-full p-2 border rounded-lg" required>
</div>
<button type="submit" class="bg-blue-500 text-white px-4 py-2 rounded-md">Simpan</button>
</form>
@endsection
Formulir ini memungkinkan admin untuk menambahkan informasi buku seperti judul, penulis, dan stok.
c. Halaman Edit Buku
Buat file resources/views/books/edit.blade.php
untuk mengedit buku:
@extends('layouts.app')
@section('content')
<h1 class="text-2xl font-bold mb-4">Edit Buku</h1>
<form action="{{ route('books.update', $book->id) }}" method="POST" class="bg-white p-6 rounded-lg shadow-lg">
@csrf
@method('PUT')
<div class="mb-4">
<label for="title" class="block text-gray-700">Judul Buku:</label>
<input type="text" id="title" name="title" class="w-full p-2 border rounded-lg" value="{{ $book->title }}" required>
</div>
<div class="mb-4">
<label for="author" class="block text-gray-700">Penulis:</label>
<input type="text" id="author" name="author" class="w-full p-2 border rounded-lg" value="{{ $book->author }}" required>
</div>
<div class="mb-4">
<label for="stock" class="block text-gray-700">Stok:</label>
<input type="number" id="stock" name="stock" class="w-full p-2 border rounded-lg" value="{{ $book->stock }}" required>
</div>
<button type="submit" class="bg-blue-500 text-white px-4 py-2 rounded-md">Simpan Perubahan</button>
</form>
@endsection
Form ini menampilkan data buku yang bisa diubah oleh admin atau librarian.
3. Membuat Template Manajemen Peminjaman
Setelah template CRUD buku selesai, kita akan membuat template untuk manajemen peminjaman, di mana pengguna yang terdaftar dapat meminjam buku.
a. Halaman Peminjaman Buku
Buat file resources/views/loans/index.blade.php
untuk menampilkan buku yang tersedia untuk dipinjam:
@extends('layouts.app')
@section('content')
<h1 class="text-2xl font-bold mb-4">Daftar Buku yang Tersedia untuk Dipinjam</h1>
<table class="min-w-full bg-white rounded-lg shadow-lg">
<thead>
<tr class="w-full bg-gray-200">
<th class="py-2 px-4 text-left">Judul</th>
<th class="py-2 px-4 text-left">Penulis</th>
<th class="py-2 px-4 text-left">Stok</th>
<th class="py-2 px-4 text-left">Aksi</th>
</tr>
</thead>
<tbody>
@foreach($books as $book)
<tr class="border-b">
<td class="py-2 px-4">{{ $book->title }}</td>
<td class="py-2 px-4">{{ $book->author }}</td>
<td class="py-2 px-4">{{ $book->stock }}</td>
<td class="py-2 px-4">
@if($book->stock > 0)
<form action="{{ route('loans.borrow', $book->id) }}" method="POST">
@csrf
<button type="submit" class="bg-green-500 text-white px-4 py-2 rounded-md">Pinjam Buku</button>
</form>
@else
<span class="text-red-500">Stok Habis</span>
@endif
</td>
</tr>
@endforeach
</tbody>
</table>
@endsection
Template ini memungkinkan pengguna untuk melihat buku yang tersedia dan melakukan peminjaman jika stok masih ada.
Cara Membuat Controller untuk Manajemen Buku, Peminjaman, dan Pengembalian serta Implementasi Role dan Permission
Pada bagian ini, kita akan membuat controller untuk manajemen buku, peminjaman buku, dan pengembalian buku. Selain itu, kita akan menerapkan role dan permission yang sudah dibuat menggunakan package Spatie Laravel Permission untuk mengatur akses pengguna berdasarkan hak aksesnya (admin, librarian, dan member).
1. Membuat Controller untuk Manajemen Buku
Pertama, kita akan membuat controller untuk manajemen buku yang akan menangani CRUD (Create, Read, Update, Delete) operasi untuk tabel books
.
a. Membuat BookController
Jalankan perintah berikut di terminal untuk membuat controller:
php artisan make:controller BookController
Setelah controller dibuat, buka file app/Http/Controllers/BookController.php
dan tambahkan kode berikut untuk setiap operasi CRUD:
namespace App\\\\Http\\\\Controllers;
use App\\\\Models\\\\Book;
use Illuminate\\\\Http\\\\Request;
class BookController extends Controller
{
// Constructor untuk mengatur middleware
public function __construct()
{
// Hanya admin dan librarian yang bisa mengelola buku
$this->middleware('role:admin|librarian');
}
// Menampilkan daftar buku
public function index()
{
$books = Book::all();
return view('books.index', compact('books'));
}
// Menampilkan form tambah buku
public function create()
{
return view('books.create');
}
// Menyimpan buku baru ke database
public function store(Request $request)
{
$request->validate([
'title' => 'required',
'author' => 'required',
'stock' => 'required|integer|min:0',
]);
Book::create($request->all());
return redirect()->route('books.index')->with('success', 'Buku berhasil ditambahkan.');
}
// Menampilkan form edit buku
public function edit(Book $book)
{
return view('books.edit', compact('book'));
}
// Mengupdate data buku di database
public function update(Request $request, Book $book)
{
$request->validate([
'title' => 'required',
'author' => 'required',
'stock' => 'required|integer|min:0',
]);
$book->update($request->all());
return redirect()->route('books.index')->with('success', 'Buku berhasil diperbarui.');
}
// Menghapus buku dari database
public function destroy(Book $book)
{
$book->delete();
return redirect()->route('books.index')->with('success', 'Buku berhasil dihapus.');
}
}
Dalam controller ini, kita menggunakan middleware untuk membatasi akses ke fitur manajemen buku hanya untuk pengguna dengan role admin
atau librarian
. Setiap metode bertanggung jawab atas CRUD operasi (menampilkan, menambah, memperbarui, dan menghapus buku).
2. Membuat Controller untuk Peminjaman Buku
Selanjutnya, kita akan membuat controller untuk peminjaman buku yang memungkinkan pengguna member untuk meminjam buku.
a. Membuat LoanController
Jalankan perintah berikut untuk membuat controller:
php artisan make:controller LoanController
Setelah controller dibuat, buka file app/Http/Controllers/LoanController.php
dan tambahkan kode berikut untuk manajemen peminjaman:
namespace App\\\\Http\\\\Controllers;
use App\\\\Models\\\\Book;
use App\\\\Models\\\\Loan;
use Illuminate\\\\Http\\\\Request;
use Illuminate\\\\Support\\\\Facades\\\\Auth;
class LoanController extends Controller
{
// Constructor untuk mengatur middleware
public function __construct()
{
// Hanya member yang bisa meminjam buku
$this->middleware('role:member');
}
// Menampilkan daftar buku yang bisa dipinjam
public function index()
{
$books = Book::where('stock', '>', 0)->get();
return view('loans.index', compact('books'));
}
// Proses peminjaman buku
public function borrow(Request $request, Book $book)
{
if ($book->stock > 0) {
Loan::create([
'book_id' => $book->id,
'borrower_id' => Auth::user()->id,
'loan_date' => now(),
]);
// Kurangi stok buku
$book->decrement('stock');
return redirect()->route('loans.index')->with('success', 'Buku berhasil dipinjam.');
}
return redirect()->route('loans.index')->with('error', 'Stok buku habis.');
}
}
Dalam LoanController
, kita menggunakan middleware role:member
untuk memastikan hanya pengguna dengan role member
yang dapat meminjam buku. Metode borrow
bertanggung jawab untuk mencatat peminjaman buku dan mengurangi stok buku.
3. Membuat Controller untuk Pengembalian Buku
Selanjutnya, kita akan membuat controller untuk pengembalian buku yang memungkinkan admin atau librarian untuk mencatat pengembalian buku oleh member.
a. Membuat ReturnController
Jalankan perintah berikut untuk membuat controller:
php artisan make:controller ReturnController
Buka file app/Http/Controllers/ReturnController.php
dan tambahkan kode berikut untuk manajemen pengembalian:
namespace App\\\\Http\\\\Controllers;
use App\\\\Models\\\\Loan;
use App\\\\Models\\\\Book;
use Illuminate\\\\Http\\\\Request;
class ReturnController extends Controller
{
// Constructor untuk mengatur middleware
public function __construct()
{
// Hanya admin dan librarian yang bisa mengelola pengembalian
$this->middleware('role:admin|librarian');
}
// Menampilkan daftar buku yang sedang dipinjam
public function index()
{
$loans = Loan::whereNull('return_date')->get();
return view('returns.index', compact('loans'));
}
// Proses pengembalian buku
public function returnBook(Request $request, Loan $loan)
{
$loan->update([
'return_date' => now(),
]);
// Tambah kembali stok buku
$loan->book->increment('stock');
return redirect()->route('returns.index')->with('success', 'Buku berhasil dikembalikan.');
}
}
Di ReturnController
, kita membatasi akses dengan middleware agar hanya admin dan librarian yang bisa mencatat pengembalian buku. Metode returnBook
mencatat tanggal pengembalian buku dan mengembalikan stok buku yang dipinjam.
4. Implementasi Role dan Permission dalam Routing
Untuk menghubungkan controller dengan Blade templates, kita perlu menambahkan routing yang sesuai di file routes/web.php
. Pastikan routing menggunakan middleware role untuk membatasi akses sesuai role pengguna.
use App\\\\Http\\\\Controllers\\\\BookController;
use App\\\\Http\\\\Controllers\\\\LoanController;
use App\\\\Http\\\\Controllers\\\\ReturnController;
// Routing untuk manajemen buku (hanya untuk admin dan librarian)
Route::middleware(['role:admin|librarian'])->group(function () {
Route::resource('books', BookController::class);
});
// Routing untuk peminjaman buku (hanya untuk member)
Route::middleware(['role:member'])->group(function () {
Route::get('loans', [LoanController::class, 'index'])->name('loans.index');
Route::post('loans/{book}/borrow', [LoanController::class, 'borrow'])->name('loans.borrow');
});
// Routing untuk pengembalian buku (hanya untuk admin dan librarian)
Route::middleware(['role:admin|librarian'])->group(function () {
Route::get('returns', [ReturnController::class, 'index'])->name('returns.index');
Route::post('returns/{loan}/return', [ReturnController::class, 'returnBook'])->name('returns.return');
});
Penutup
Dalam tutorial ini, kita telah membangun sebuah website perpustakaan online menggunakan Laravel 11, MySQL 8, Laravel Breeze untuk autentikasi, serta Spatie Laravel Permission untuk mengelola role dan permission pengguna. Website ini dilengkapi dengan fitur CRUD buku, peminjaman buku, dan pengembalian buku, di mana setiap pengguna memiliki akses sesuai dengan peran mereka.
- Admin memiliki akses penuh untuk mengelola buku, anggota, serta pencatatan peminjaman dan pengembalian buku.
- Librarian memiliki hak yang mirip dengan admin dalam hal pengelolaan buku dan manajemen peminjaman.
- Member hanya dapat melakukan pencarian buku dan meminjam buku jika stok tersedia.
Dengan pembagian hak akses ini, pengelolaan perpustakaan menjadi lebih efektif dan aman, karena setiap pengguna hanya dapat melakukan tindakan sesuai dengan peran dan tanggung jawab mereka. Pendekatan ini tidak hanya meningkatkan keamanan, tetapi juga memperjelas alur kerja di dalam sistem perpustakaan online.
Semoga tutorial ini membantu dalam membangun aplikasi perpustakaan yang efisien dan terstruktur dengan baik!
Saran Dari Mentor
Laravel terus menjadi pilihan populer di kalangan developer karena framework ini selalu menghadirkan update menarik yang memudahkan proses pengembangan web. Dengan fitur-fitur terbaru seperti sistem otentikasi yang mudah, manajemen role dan permission yang efisien, serta komunitas yang kuat, Laravel membantu developer untuk membangun aplikasi yang aman, scalable, dan cepat.
Bagi yang ingin terus memperdalam skill Laravel atau framework lain, pantau terus website Buildwithangga. Mereka sering memberikan update kelas gratis yang berfokus pada studi kasus menarik dan praktis, disertai bimbingan dari mentor berpengalaman. Selain itu, dengan akses kelas seumur hidup, Anda bisa belajar kapan saja dan dari mana saja, memastikan Anda selalu up-to-date dengan perkembangan teknologi terbaru.
Terus tingkatkan kemampuan coding Anda bersama Buildwithangga dan raih kesempatan karier yang lebih baik di industri web development!