Belajar Laravel10 dari Blank sampai On #3 Routing

By | Juni 21, 2023
This entry is part 1 of 3 in the series Belajar Laravel dari Blank sampai On

MWI – Setelah Belajar Laravel10 dari Blank sampai On tahap 2 selesai, kita lanjutkan ke Laravel10 tahap 3 tentang routing yang akan dibahas kali ini. Pada pembahasan routing ini kita memiliki beberapa pembahasan yaitu:

Menentukan route

Buka file web.php yang berada pada folder routes perhatikan isinya

Route::get('/', function () {
   return view('welcome');
});

Artinya jika tak ada tambahan arahkan ke view yang bernama welcome.blade.php

Coba tambahkan

Route::get('/contacts', function() {
   return "<h1> Daftar Kontak</h1>";
});

Cek hasilnya di browser

Coba tambahkan

Route::get('/contacts/create', function() {
   return "<h1>Tambah Kontak Baru</h1>";
});

Cek kembali hasilnya

Cek route apa saja yang ada di project ini dengan perintah

php artisan route:list

Terlihat bahwa ada 8 route yang dikenal di project contact-app yang sedang kita buat ini, termasuk route default yang sudah dibuat oleh laravel. 

Berikan opsi –except-vendor untuk menampilkan list diluar vendor

php artisan route:list –-except-vendor

Untuk perintah sebaliknya dapat menambahkan opsi –only-vendor menjadi

php artisan route:list --only-vendor
php artisan route:list –-path=contacts
php artisan route:list –-path=contacts -r
php artisan route:list –h

Routes Parameters

Untuk menambahkan parameter semisal think.ms:8000/contacts/1 pada address bar browser kita dapat mengatur pada folder /routes/web.php menjadi

Route::get('/contacts/{id}', function($id) {
   return "Ini Kontak ke-" . $id;
});

Hasil pada browser menjadi

Lanjutkan dengan parameter untuk nama, misal

Route::get('/companies/{name?}', function($name=null) {
   if($name) {
       return "Nama Perusahaan: " . $name;
   } else {
       return "Nama Perusahaan Kosong";
   }
});

Jika isi parameter berisi nama perusahaan

Jika tidak diisi

  1. Membatasi Parameter Route

Kita dapat menambahkan parameter dengan where untuk membatasi tambahan isian pada address bar, misal pada route contacts kita tambahkan where menjadi

Route::get('/contacts/{id}', function($id) {
   return "Ini Kontak ke-" . $id;
})->where('id', '[0-9]+');

Artinya isian id hanya dapat diisi dengan angka dari0-9 saja. Lihat bedanya ketika kita menggunakan where 

dan tanpa where

Begitu juga untuk companies kita dapat menambahkan pilihan isian dengan huruf a-z dan huruf A-Z, tambahan where dapat kita tulis menjadi where(‘name’, ‘[a-zA-Z]+’);

Route::get('/companies/{name?}', function($name=null) {
   if($name) {
       return "Nama Perusahaan: " . $name;
   } else {
       return "Nama Perusahaan Kosong";
   }
})->where('name', '[a-zA-Z]+');

 Bandingkan hasilnya antara dengan where

Dan tanpa where

Penulisan ->where(‘id’, ‘[0-9]+’); dapat menggunakan whereNumber(‘id’); dengan hasil yang sama begitu juga juga ->where(‘name’, ‘[a-zA-Z0-9]+’); dapat menggunakan whereAlpha(‘nama’); atau jadikan ->whereAlphaNumeric(‘name’); jika ingin angka diizinkan, coding lengkap menjadi

Route::get('/contacts/{id}', function($id) {
   return "Ini Kontak ke-" . $id;
})->whereNumber('id');
Route::get('/companies/{name?}', function($name=null) {
   if($name) {
       return "Nama Perusahaan: " . $name;
   } else {
       return "Nama Perusahaan Kosong";
   }
})->whereAlphaNumeric('name');

Demikian pembahasan mengenai pembatasan pada parameter route

Memberi nama route

Ubah pada route / menjadi

Route::get('/', function () {
   $html = "
   <h1>Contact App</h1>
   <div>
       <a href='/contacts'>All contacts</>
       <a href='/contacts/create'>Add contacts</>
       <a href='/contacts/1'>Show contacts</>
   </div>
   ";
   return $html;
   // return view('welcome');
});

Tes di browser dan pastikan semua link berjalan sempurna, seperti ini

Klik pada pilihan All contacts

Namun ketika ada perubahan pada route All contacts misal akna dibuat singular menjadi seperti ini

Route::get('/contact', function() {
   return "<h1>Daftar Kontak</h1>";
});

Ternyata link menjadi tidak dapat dijangkau dan menampilkan 404

Untuk mengatasi permasalahan ini beri nama pada route yang kita miliki. Pada contoh route contact tadi cara yang dapat dilakukan adalah ubah metode namanya menjadi ->name(‘contacts.index’) lakukan hal yang sama untuk create dan view, hingga route-nya menjadi

Route::get('/contact', function() {
   return "<h1>Daftar Kontak</h1>";
})->name('contacts.index');
Route::get('/contacts/create', function() {
   return "<h1>Tambah Kontak Baru</h1>";
})->name('contacts.create');
Route::get('/contacts/{id}', function($id) {
   return "Ini Kontak ke-" . $id;
})->whereNumber('id')->name('contacts.show');

Lakukan juga perubahan untuk link html pada route / dengan menambahkan route() dan sesuaikan dengan route name yang diberikan diatas, kode-nya menjadi

Route::get('/', function () {
   $html = "
   <h1>Contact App</h1>
   <div>
       <a href='" . route('contacts.index') . "'>All contacts</>
       <a href='" . route('contacts.create') . "'>Add contacts</>
       <a href='" . route('contacts.show', 1) . "'>Show contacts</>
   </div>
   ";
   return $html;
   // return view('welcome');
});

Cek di browser refresh ulang dan klik pada link yang ada, pastikan semua link berfungsi dengan baik seperti ini

Tes dengan melakukan perubahan link pada route contact menjadi contacts (mengembalikan ke plural word), 

Route::get('/contacts', function() {
   return "<h1>Daftar Kontak</h1>";
})->name('contacts.index');

cek ulang pada browser, ternyata semua tetap berjalan baik meski ada perubahan link, itulah kegunaan dari route name 

Jika perubahan pada link, dengan route name yang sama, maka link tetap dapat tetap berfungsi sempurna.  Untuk cek link daftar route yang ada dan yang sudah kita buat dapat menggunakan perintah php artisan route:list

Kita juga dapat menampilkan hanya daftar yang kita buat saja dengan menambahkan opsi kecuali vendor –except-vendor

Membuat group route

Pada materi ini kita akan membahas tentang membuat route untuk kelompok (grup), alias mengelompokan route. Sebagai contoh ketik menambahkan url admin ke masing-masing route yang diberikan menjadi seperti ini:

Route::get('/admin/contacts', function() {
   return "<h1>Daftar Kontak</h1>";
})->name('contacts.index');

Route::get('/admin/contacts/create', function() {
   return "<h1>Tambah Kontak Baru</h1>";
})->name('contacts.create');
Route::get('/admin/contacts/{id}', function($id) {
   return "Ini Kontak ke-" . $id;
})->whereNumber('id')->name('contacts.show');

Route::get('/admin/companies/{name?}', function($name=null) {
   if($name) {
       return "Nama Perusahaan: " . $name;
   } else {
       return "Nama Perusahaan Kosong";
   }
})->whereAlphaNumeric('name');

Cek hasilnya dengan mencoba link satu-persatu, ternyata semua berjalan lancar. Cara ini benar, namun ini bukanlah cara praktek yang baik, mestinya kita kelompokan dalam kelompok admin menjadi seperti ini:

Route::prefix('admin')->group(function() {
   Route::get('/contacts', function() {
       return "<h1>Daftar Kontak</h1>";
   })->name('contacts.index');
   Route::get('/contacts/create', function() {
       return "<h1>Tambah Kontak Baru</h1>";
   })->name('contacts.create');
   Route::get('/contacts/{id}', function($id) {
       return "Ini Kontak ke-" . $id;
   })->whereNumber('id')->name('contacts.show');
   Route::get('/companies/{name?}', function($name=null) {
       if($name) {
           return "Nama Perusahaan: " . $name;
       } else {
           return "Nama Perusahaan Kosong";
       }
   })->whereAlphaNumeric('name');
});

Cek link dengan route:list ternyata hasil memunculkan /admin/ diawalnya seperti ini

Bagaimana jika penyimpanan pada view dimasukan kedalam folder admin, kita dapat juga menambahkan opsi name(‘admin.’) seperti ini

Route::get('/', function () {
    $html = "
    <h1>Contact App</h1>
    <div>
        <a href='" . route('admin.contacts.index') . "'>All contacts</>
        <a href='" . route('admin.contacts.create') . "'>Add contacts</>
        <a href='" . route('admin.contacts.show', 1) . "'>Show contacts</>
    </div>
    ";
    return $html;
    // return view('welcome');
});

Route::prefix('admin')->name('admin.')->group(function() {
    Route::get('/contacts', function() {
        return "<h1>Daftar Kontak</h1>";
    })->name('contacts.index');
    
    Route::get('/contacts/create', function() {
        return "<h1>Tambah Kontak Baru</h1>";
    })->name('contacts.create');
    
    Route::get('/contacts/{id}', function($id) {
        return "Ini Kontak ke-" . $id;
    })->whereNumber('id')->name('contacts.show');
    
    Route::get('/companies/{name?}', function($name=null) {
        if($name) {
            return "Nama Perusahaan: " . $name;
        } else {
            return "Nama Perusahaan Kosong";
        }
    })->whereAlphaNumeric('name')->name('companies');
});

Cek kembali dengan 

php artisan route:list --except-vendor

Route Cadangan

Route cadangan dalam laravel disebut dengan route fallback() dimana route ini akan dijalankan ketika route ada tidak yang mencakup, semacam else jika di if atau semacam default jika di switch. Cara penggunaan tambahkan Route::fallback() seperti ini

Route::fallback(function() {
     return "<h1>Maaf, halaman yang anda tuju tidak ada</h1>";
});

   Jika dijalankan di browser akan menghasilkan

Demikian pembahasan tentang routing pada materi ke-tiga kali ini, selanjutnya kita akan bersiap pada pembahasan View Laravel10 pada segmen selanjutnya. Sukses selalu untuk kita semua, by sahabat belajarmu musa (ms).

Series NavigationBelajar Laravel dari Blank sampai On #2 Memulai >>

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

Situs ini menggunakan Akismet untuk mengurangi spam. Pelajari bagaimana data komentar Anda diproses.