@VladimirKrasnov

Как получить красивый url в Laravel?

Есть вот такой маршрут и метод
Route::get('/{slug}', [App\Http\Controllers\IndexController::class, 'show'])->name('show');

public function show($slug)
{
    $ad = Ad::where('slug', $slug)->firstOrFail();
    return view('ad', compact('ad'));
}


На главной странице в превью записи кнопочка с href="{{ route('show', ['slug' => $ad->slug]) }}"

В модели Ad
public function getRouteKeyName()
{
    return 'slug';
}


В базе при создании записи, автоматически формируется slug типа "new-post", и я хочу получить url вида localhost/new-post, но в место этого получаю 404
  • Вопрос задан
  • 203 просмотра
Пригласить эксперта
Ответы на вопрос 2
neuotq
@neuotq
Прокрастинация
Вы используете getRouteKeyName(), вам тогда нужно изменить метод show, примерно так:
public function show($ad)
{   
    return view('ad', compact('ad'));
}

и в роутере тогда тоже для красоты
Route::get('/{ad}', [App\Http\Controllers\AdController::class, 'show'])->name('show');

Либо, убирайте getRouteKeyName, которым вы задаёте поле по которому вычисляется нужная модель(по дефолту это id)
Ответ написан
Комментировать
@FANTASANTA
В роуте этот код спустите в самый низ
Route::get('/{slug}', [App\Http\Controllers\IndexController::class, 'show'])->name('show');
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы