
Pendahuluan
Bayangin lagi ngerjain fitur sederhana, tapi pas mau nambahin menu baru, malah harus bongkar-pasang file layout berkali-kali karena menunya masih hardcoded. Awalnya saya pikir nulis menu langsung di file Blade itu praktis, tapi lama-lama project jadi berantakan pas klien minta nambahin akses level menu. Akhirnya saya sadar kalau navigasi itu harusnya dinamis dan berbasis data, supaya nggak bikin pusing di kemudian hari.
Tips & Best Practices
Di banyak project, biasanya saya mulai dari membuat View Composer untuk memisahkan logika menu dari controller agar layout tetap bersih. Berikutnya, saya sering memanfaatkan cache untuk menyimpan struktur menu agar query ke database nggak berjalan setiap kali halaman di-load, apalagi kalau menunya jarang berubah. Terakhir, saya selalu membiasakan diri menggunakan form request atau middleware untuk memvalidasi akses menu berdasarkan role pengguna agar navigasi yang tampil benar-benar relevan.
Contoh Kode
Biasanya saya definisikan menu dalam bentuk array di ServiceProvider atau config, lalu saya lempar ke view. Contohnya begini:
// Dalam AppServiceProvider.php
View::composer('layouts.app', function ($view) {
$menu = [
['label' => 'Dashboard', 'url' => '/dashboard', 'permission' => 'view_dashboard'],
['label' => 'Settings', 'url' => '/settings', 'permission' => 'manage_settings'],
];
$view->with('menu', collect($menu)->filter(fn($m) => auth()->user()->can($m['permission'])));
});Variasi Implementasi
Kita punya dua jalur utama: lewat config array yang statis tapi cepat, atau database untuk dashboard admin yang fleksibel. Kalau project-nya skala kecil, saya lebih suka pakai file config agar lebih ringan. Tapi untuk sistem CMS yang menunya bisa diatur user, menyimpan di database dengan relasi nested set jauh lebih masuk akal meskipun nambah beban query.
Kesalahan Umum
Sering saya temui developer yang lupa melakukan eager loading kalau menunya diambil dari database, ujung-ujungnya kena N+1 problem. Kedua, menaruh logika pengecekan role langsung di dalam file Blade yang bikin kodenya jadi 'spaghetti'. Ketiga, menggunakan hardcoded URL di setiap view padahal bisa pakai helper route(). Keempat, melupakan state 'active' pada menu, yang bikin user bingung mereka ada di halaman mana. Kelima, terlalu memaksakan menu yang kompleks di perangkat mobile tanpa memikirkan struktur hamburger menu yang responsif.
Ringkasan
Navigasi itu wajah dari aplikasi kita, jadi jangan dianggap remeh. Dengan membuat navigasi yang dinamis, kita bukan cuma ngerapihin kode, tapi juga investasi buat jangka panjang supaya pas revisi nanti kita nggak perlu keringat dingin. Intinya, keep it simple, gunakan power of ServiceProvider, dan selalu ingat kalau maintenance itu jauh lebih penting daripada sekadar 'fitur jalan'.
Komentar
Posting Komentar