- Belajar Laravel10 dari Blank sampai On #3 Routing
- Belajar Laravel dari Blank sampai On #1 Persiapan
- Belajar Laravel dari Blank sampai On #2 Memulai
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:
Daftar Isi
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
- 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).