mustafacakir Öncelikle rota ile ilgili dokümanları dikkatlice inceleyin:
https://laravel.com/docs/10.x/routing
Aradığınız bölüm ise şurası (ama tüm dokümanı mutlaka okuyun):
https://laravel.com/docs/10.x/routing#required-parameters
Kısaca bahsetmek gerekirse;
Route::get('{slug}', PageController::class);
yaptığınızda domain.com/slug şeklinde gelen bir ifadede slug kısmını (segment olarak geçer) controller sınıfının ilgili yöntemine parametre olarak göndermiş oluyorsunuz. Üstte verdiğim controller invokable olduğu için yöntem belirtmedim. O yüzden şöyle oluyor:
class PageController extends Controller
{
public function __invoke(Request $request, $slug)
{
$page = Page::where('slug', $slug)
->firstOrFail();
return view('pages.show', compact('page'));
}
}
Somut bir örnek vermek gerekirse;
https://domain.com/merhaba-dunya
şeklinde girdiğinizde PageController içinde
$page = Page::where('slug', 'merhaba-dunya')
->firstOrFail();
yapmış oluyorsunuz.
Önemli not:
Rota dosyalarında (routes/web.php, routes/api.php vs) rotalar yazıldıkları sıra ile yakalanır. Eğer şöyle bir şey yaparsanız:
Route::get('{slug}', PageController::class);
Route::get('iletisim', ContactController::class);
iletisim rotasını hiçbir zaman yakalamaz çünkü üstteki rota ondan önce yakalar. O yüzden iletişim rotası üste yazılmalı. Buna dikkat edin.
Son olarak kendi bilgisayarınızda geliştirme yaparken kesinlikle route:cache, view:cache, optimize ... gibi artisan komutlarını çalıştırmayın. Arkadaşlar bu komutları gerek olmadığı halde kendi bilgisayarında çalıştırıyor, sonra buraya gelip rotaları değiştiriyorum ama çalışmıyor diye konu açıyorlar.