DEV Community

Cover image for ๐Ÿ—บ๏ธ Peta Jalan Laravel: Menjelajah Routing, Middleware, dan Controller (Indonesian Version)

๐Ÿ—บ๏ธ Peta Jalan Laravel: Menjelajah Routing, Middleware, dan Controller (Indonesian Version)

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
Enter fullscreen mode Exit fullscreen mode

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');
Enter fullscreen mode Exit fullscreen mode
  • 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 metode index() pada kelas TentangKamiController.
  • ->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);
    }
}
Enter fullscreen mode Exit fullscreen mode

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');
Enter fullscreen mode Exit fullscreen mode

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';
    }
}
Enter fullscreen mode Exit fullscreen mode

Penjelasan:

  • Kita menambahkan metode isAdmin() pada model User untuk memeriksa apakah pengguna memiliki role "admin".

Cara Kerja:

  • Ketika pengguna mengakses /tentang-kami, middleware admin 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);
    }
}
Enter fullscreen mode Exit fullscreen mode

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>
Enter fullscreen mode Exit fullscreen mode

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'));
}
Enter fullscreen mode Exit fullscreen mode

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 view profile.

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)