Bismillaahirrahmaanirrahiim.
Pernahkah kamu penasaran bagaimana sebuah website bisa menampilkan halaman yang berbeda-beda ketika kita mengeklik link yang berbeda? Atau bagaimana sebuah aplikasi web bisa melindungi data pengguna?
Jawaban dari pertanyaan-pertanyaan tersebut terletak pada pemahaman tentang routing, middleware, dan controller di Laravel.
Pada artikel pertama saya ini, kita akan membahas secara dasar mengenai tiga komponen penting ini insyaa'allaah.
Saya menulis artikel ini pun tidak lepas dari bimbingan mentor saya, yang sedang membantu kami dalam memahami konsep-konsep yang rumit. Jazaahullaahu Khairan.
Dan berikut contoh struktur foldernya:
resources/
โโโ views/
โ โโโ tentang-kami.blade.php
app/
โโโ Http/
โ โโโ Controllers/
โ โ โโโ TentangKamiController.php
โ โโโ Middleware/
โ โโโ AdminMiddleware.php
โโโ Models/
โ โโโ User.php
routes/
โโโ web.php
Okay, mari kita langsung bedah satu per satu!
1 - Routing
Ini seperti alamat rumah. Saat kamu memasukkan alamat suatu rumah ke dalam aplikasi peta (misalnya), aplikasi akan menunjuk ke rumah yang tepat.
Di Laravel, routing menentukan halaman mana yang akan ditampilkan ketika pengguna mengetikkan alamat web (URL) tertentu.
Misalnya, ketika kamu mengetikkan
https://example.com/tentang-kami
Maka routing akan mengarahkanmu ke halaman "Tentang Kami".
Untuk membuat routing di Laravel, kita akan menggunakan file routes/web.php
.
Di dalam file ini, kita akan mendefinisikan rute yang menghubungkan URL dengan controller yang akan memproses permintaan tersebut. Sebagai Contoh:
use App\Http\Controllers\TentangKamiController;
Route::get('/tentang-kami', [TentangKamiController::class, 'index'])->name('tentang-kami');
-
Route::get()
: Metode ini digunakan untuk mendefinisikan rute yang hanya bisa diakses melalui metode HTTP GET. -
/tentang-kami
: Ini adalah URL yang akan kita gunakan untuk mengakses halaman "Tentang Kami". -
[TentangKamiController::class, 'index']
: Ini menunjukkan bahwa ketika URL tersebut diakses, Laravel akan memanggil metodeindex()
pada kelasTentangKamiController
. -
->name('tentang-kami')
: Ini memberikan nama untuk rute ini. Nama rute ini berguna untuk membuat link atau redirect ke rute ini di bagian lain aplikasi.
2 - Middleware
Ini seperti penjaga pintu rumah. Sebelum kamu masuk ke rumah, penjaga pintu akan memeriksa identitasmu atau barang bawaanmu. So cool! Isn't?!
Middleware di Laravel berfungsi untuk memeriksa setiap permintaan yang masuk ke aplikasi.
Misalnya, Middleware bisa digunakan untuk memastikan pengguna (user) sudah login sebelum mengakses halaman tertentu atau untuk memeriksa apakah pengguna memiliki izin untuk melakukan tindakan tertentu.
Beberapa contoh penggunaan Middleware diantaranya:
Otentikasi: Memastikan pengguna telah login sebelum mengakses halaman tertentu.
Autorisasi: Memeriksa apakah pengguna memiliki izin untuk melakukan tindakan tertentu.
Logging: Mencatat setiap permintaan yang masuk ke aplikasi.
Persiapan data: Mempersiapkan data yang dibutuhkan oleh controller.
Misalnya, kita ingin halaman "Tentang Kami" hanya bisa diakses oleh pengguna yang sudah login dan memiliki role "admin".
Maka pada AdminMiddleware.php
, Middleware akan diimplementasikan sebagai berikut;
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class AdminMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) ย
$next
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
*/
public function handle(Request $request, Closure $next)
{
if ย
(!auth()->check() || !auth()->user()->isAdmin()) {
return redirect('login');
}
return $next($request);
}
}
Penjelasan:
-
auth()->check()
: Memeriksa apakah pengguna sudah login. -
auth()->user()->isAdmin()
: Memeriksa apakah pengguna yang sedang login memiliki role "admin". Biasanya, kita akan menyimpan informasi role pengguna dalam database. -
return redirect('login');
: Jika pengguna tidak memenuhi syarat, maka akan dialihkan ke halaman login.
Lalu Routing akan diimplementasikan menjadi;
// routes/web.php
Route::get('/tentang-kami', [TentangKamiController::class, 'index'])->name('tentang-kami')->middleware('admin');
Dan Model User pada User.php
akan seperti ini;
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
// ...
public function isAdmin()
{
return $this->role === 'admin';
}
}
Penjelasan:
- Kita menambahkan metode
isAdmin()
pada model User untuk memeriksa apakah pengguna memiliki role "admin".
Cara Kerja:
- Ketika pengguna mengakses
/tentang-kami
, middlewareadmin
akan dijalankan. - Middleware akan memeriksa apakah pengguna sudah login dan memiliki role "admin".
- Jika memenuhi syarat, request akan diteruskan ke controller.
- Jika tidak memenuhi syarat, pengguna akan dialihkan ke halaman login.
3 - Controller
Ini seperti tuan rumah di rumah yang kita ingin tuju setelah bertemu Routing dan Middleware.
Tuan rumah akan menyambut tamu, mempersiapkan makanan, dan mengatur acara di rumah.
Controller di Laravel bertanggung jawab untuk memproses data, mengambil data dari database, dan kemudian menampilkan data tersebut dalam bentuk halaman web.
Misalnya, ketika kamu ingin melihat daftar produk di sebuah toko online, controller akan mengambil data produk dari database dan kemudian menampilkannya dalam bentuk halaman produk tersebut.
Dalam implementasi Controller sudah sempat disinggung ya sebelumnya kalau akan seperti ini;
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class TentangKamiController extends Controller
{
public function index()
{
// Logic untuk mengambil data yang akan ditampilkan di halaman "Tentang Kami"
// Misalnya, dari database atau konfigurasi
$data = [
'title' => 'Tentang Kami',
'content' => 'Ini adalah halaman tentang perusahaan kami.'
];
return view('tentang-kami', $data);
}
}
Penjelasan:
-
Method
index()
: Ini adalah method utama yang akan dijalankan ketika user mengakses URL/tentang-kami
. -
$data
: Array ini berisi data yang akan dikirim ke view. Dalam contoh ini, kita hanya mengirim judul dan konten halaman. Anda bisa menambahkan data lain sesuai kebutuhan, misalnya nama perusahaan, visi misi, dll. -
return view('tentang-kami', $data);
: Fungsi ini akan mencari file view tentang-kami.blade.php
dan mengirimkan data$data
ke view tersebut.
Lalu dalam tentang-kami.blade.php
, View akan terimplementasi menjadi;
<h1>{{ $title }}</h1>
<p>{{ $content }}</p>
Penjelasan:
- Blade Template: Laravel menggunakan Blade sebagai template engine. Kita bisa menggunakan sintaks Blade untuk menampilkan data yang dikirim dari controller. setidaknya itu yang saya ketahui.
-
{{ $title }}
dan{{ $content }}
: Ini akan digantikan dengan nilai dari variabel$title
dan$content
yang dikirim dari controller.
4 - Kesimpulan
Kita dapat meringkas penggunaan sebagai berikut;
// routes/web.php
Route::get('/profile', [UserController::class, 'show'])->middleware('auth');
// app/Http/Controllers/UserController.php
public function show()
{
$user = auth()->user();
return view('profile', compact('user'));
}
Dalam contoh di atas:
- User meminta halaman
/profile
kepada Routing lalu Routing menunjukkan lokasinya dan diambil alih oleh Middleware. - Middleware
auth
akan memeriksa apakah User sudah login. - Jika sudah login, Middleware mengizinkan User masuk yang kemudian Controller
UserController
akan menyambut lalu mengambil data User dan meneruskannya ke viewprofile
.
Akhirnya selesai juga pembahasan kali ini, tidak begitu rumit kan? Yah, walaupun method dari ketiganya cukup rumit di awal, tapi setidaknya saya tidak membuat kamu mundur ke belakang dengan penjelasan yang mudah, did I?
Okay, cukup sekian artikel pertama saya.
Semoga bermanfaat bagi diri saya yang masih belajar juga yang lainnya untuk ikut belajar bersama saya.
Saya juga mohon maaf jika ada kesalahan dalam penjelasan maupun visualisasi. Saya absolutely menerima kritikan dan saran rekan-rekan dalam membantu saya memperbaiki issues yang sangat mungkin ada dalam studi kasus saya.
Wassalaamu'alaikum.
Top comments (0)