Laravel Route Model Binding


Mohammad Ricky Sanjaya
Hi! I'm Sanjaya Back End Developer. You can discuss with me about web technology and more!
Laravel Route Model Binding

Halo teman-teman, kembali lagi kita di web santrikoding. Pada artikel kali ini, kita akan membahas tentang laravel route binding. Apa itu laravel route binding? Yuk kita bahas langsung.

Definisi

Laravel memiliki banyak sekali magic didalam nya. Salah satu nya route binding ini. Tapi, apa maksudnya ya ? Maksudnya adalah kita bisa membind/parsing model melalui routing. Jadi, dengan memparsing model melalui routing, kita juga bisa langsung sekaligus mengambil data yang kita mau ambil data nya tanpa harus membuat query builder nya lagi. Bagaimana ya cara nya?

Contoh kasus

Misalnya kita mempunyai module user management dimana terdapat fitur menampilkan list user, tambah user, menampilkan detail user & edit user.

Route::get("/users", [UserController::class, "index"]);

Lalu pada controller kita menuliskan seperti ini

public function index()
{
  $data = [
    "users" => User::paginate(10)
  ];

  return view("users.index", $data);
}

Dan kode pada view kita seperti ini

@extends('layouts.app')
 
@section('content')
  <div class="container">
    <div class="card">
      <div class="card-body">
        <table class="table table-bordered">
          <thead>
            <tr>
              <th>#</th>
              <th>Name</th>
              <th>Email</th>
              <th>Action</th>
            </tr>
          </thead>
          <tbody>
            @forelse ($users as $user)
            <tr>
              <td>{{ $loop->index }}</td>
              <td>{{ $user->name }}</td>
              <td>{{ $user->email }}</td>
              <td>
                <a href="/users/{{ $user->id }}">Detail</a>
              </td>
            </tr>
            @empty
            <tr>
              <td colspan="4">No Data Found</td>
            </tr>
            @endforelse
          </tbody>
        </table>
 
        {{ $users->links() }}
      </div>
    </div>
  </div>
@endsection

Maka, hasil yang kita dapatkan seperti ini

Image Results

Terlihat sama seperti biasa ya? Ya, memang begitulah sifat Laravel kode nya simple namun sangat powerfull fiturnya :D

Sekarang, kita fokus link untuk menuju ke halaman detail nya. Kode untuk menuju ke halaman detail masih sama seperti biasa, yaitu

<a href="/users/{{ $user->id }}">Detail</a>

Lalu pada route, kita buat seperti ini

Route::get("/users/{user_id}", [UserController::class, "show"]);

Dan pada controller, kita buat seperti ini

public function show($id)
{
  $data = [
    "user" => User::findOrFail($id)
  ];

  return view("users.show", $data);
}

Maka, hasilnya akan seperti ini Image Results

Hasil masih normal, namun kita lihat pada kode controller kita

public function show($id)
{
  $data = [
    "user" => User::findOrFail($id)
  ];

  return view("users.show", $data);
}

Dari kode diatas, kita bisa singkat lagi. Bagaimana cara nya? Cara nya adalah dengan menggunakan Route Bind.

Refaktor Kode

Mari kita refaktor kode nya agar terlihat lebih clean lagi. Pertama, kita ubah route controller kita menjadi seperti ini

Route::get("/users/{user}", [UserController::class, "show"]);

Dari kode diatas, kita mengubah pada kurung kurawal {user} yang sebelumnya adalah {user_id}, lalu pada controller kita buat seperti ini.

public function show(User $user)
{
  return view("users.show", \compact("user"));
}

Pada controller diatas, kita ubah pada parameter show(). Sebelum nya kita hanya membuat parameter dengan variable $id saja yang dimana variable $id ini akan menerima nilai ID dari user. Sekarang kita ubah dengan membinding model User dan kita simpan kedalam variable $user.

Important!

Parameter pada route harus sama nama nya dengan variable yang di isikan pada controller. Jika pada route menggunakan {user_id} dan di controller menggunakan $user, maka route model binding tidak akan bekerja

Lalu kita tinggal parsing data nya ke view melalui method compact(). Maka hasil yang kita dapatkan adalah

Image Results

Yap, hasilnya sama saja namun kode yang kita buat menjadi lebih ringkas. Dengan menggunakan kode ini pun sudah termasuk seperti menggunakan eloquent findOrFail() dimana jika ada ID yang belum ada, maka akan redirect kehalaman 404. Contoh kita mengunjungi url

http://127.0.0.1:8000/users/1000

Dimana user dengan ID 1000 ini belum ada, jika kita kunjungi maka akan mendapatkan halaman 404

Image Results

Kesimpulan

Route model bind adalah cara kita membuat routing dimana dengan langsung membinding model pada parameter controller kita. Tujuan nya adalah agar kita dapat langsung mengambil data tanpa harus menggunakan query builder kembali.

Oke mungkin cukup segitu saja untuk seri Laravel Tips & Trik route model bind ini ya gais, nantikan tips & trik lain nya hanya di website Santrikoding.com


Mohammad Ricky Sanjaya
Hi! I'm Sanjaya Back End Developer. You can discuss with me about web technology and more!

Suka dengan tulisan di SantriKoding? Kamu bisa memberikan dukungan dengan berdonasi atau bagikan konten ini di sosial media. Terima kasih atas dukungan Anda!

KEBIJAKAN KOMENTAR

Saat memberikan komenatar silahkan memberikan informasi lengkap tentang error, seperti: screenshot, link kode, dll. Baca aturan komentar kami