Merhaba,
Bir projemde lazım oldu yazayım dedim basitçe hiyerarşik rota nasıl yapabiliriz bunu yazmaya çalıştım.
Normalde bir e-ticaret sitesine girdiğinizde karşınıza çıkan url'ler kategorinin sırasına göre gider tabi bu rota tanımlaması seoda da etkilidir.
Bahsettiğimiz rota:
/oyuncaklar/pelus-oyuncaklar/ayili-pelus-oyuncaklar/....n
diye gider.
İlk olarak bir kategori tablosunun olduğunu düşünelim içerisindeki kolonlar
id, name, slug, parent_id
parent_id 0 olan ana kategori bizim örnekte oyuncaklar 0 ana kategori pelus-oyuncaklar parent_id'si ana kategorinin id'si diye hiyerarşik bir biçimde klasik nested kategori yönetimi.
Route::get('/{category}', function ($category) {
$categories = explode('/', $category);
$lastId = 0;
foreach($categories as $key => $cat){
if(DB::table('categories')->where('slug', $cat)->doesntExist() || ($key===0 && DB::table('categories')->where('slug', $cat)->first()->parent_id!=0) || ($key!=0 && DB::table('categories')->where('slug', $cat)->first()->parent_id!=$lastId)){
abort(404);
}
if(($key===0 && DB::table('categories')->where('slug', $cat)->first()->parent_id===0) || ($key!=0 && DB::table('categories')->where('slug', $cat)->first()->parent_id===$lastId)){
$lastId = DB::table('categories')->where('slug', $cat)->first()->id;
}
}
return end($categories);
})->where('category', '[A-Za-z0-9/-]+');
basitçe belirli kontroller ile son kategorinin doğru biçimde gelip gelmediğine bakar gelmişse son kategoriyi kullanmamız için slug'ını bize verir.
Kod reviewlarınızı bekliyorum.
Umarım ihtiyaç karşılar.