Cara Atasi Halaman 404 Not Found Saat Menampilkan Postingan dengan Spesifik Kategori yang Menggunakan Spatie Translatable di Laravel


Spatie Laravel Translatable adalah salah satu package Laravel yang kita gunakan untuk multi language di mana kita menyimpan teks atau kata dalam berbagai bahasa dan menyimpannya di dalam database dalam bentuk array. 

Spatie Laravel Translatable ini kemudian kita terapkan pada kategori, misalnya kita beri nama "news" dalam Bahasa Inggris (en), dan "berita" dalam Bahasa Indonesia (id). Sehingga nantinya array yang tersimpan di dalam database seperti berikut:

name: "{"en":"News","id":"Berita"}",
slug: "{"en":"news","id":"berita"}",

Permasalahan timbul ketika kita akan menampilkan semua postingan atau artikel dengan kategori "News" yang kita panggil dengan cara Route Model Binding.

Route::get('category/{category:slug}', [CategoryController::class,
  'index'])->name('category_post.show');

Hasilnya akan menampilkan halaman Error 4040 Not Found. Saat dicek ternyata permasalahannya ada pada pemanggilan Model Category $category

Lalu bagaiman cara mengatasinya?

Caranya kita membuat file Service Provider baru dengan perintah artisan berikut

php artisan make:provider CategoryServiceProvider

Lau buka filenya di dalam folder app/Providers dengan nama file CategoryServiceProvider.php

Pada bagian method boot, isikan sebagai berikut:

public function boot(){
 Route::bind('term', function ($value) {
  return \App\Models\Category::where('slug', 'like', "%\"{$value}\"%")->firstOrFail();
 });
}

Kemudian buka file app.php yang berada dalam folder config, tambahkan pada bagian 'provider' => []

App\Providers\TranslatableServiceProvider::class,

Demikian, selamat mencoba.