Laravel возвращает один и тот же вид для 2 разных маршрутов

#php #laravel

#php #laravel

Вопрос:

Laravel каким-то образом получает один и тот же вид для 2 разных маршрутов, и я не могу понять, почему, поскольку я не очень знаком с Laravel.

Вот 2 маршрута, о которых идет речь :

 
Route::get('/{label}', [BookController::class, 'listbyCat'])->name('bycats');

Route::get('/{id}', [BookController::class, 'singlebook'])->name('book');

 

Первый маршрут — это тот, который возвращает представление (вызывая метод), это означает, что если я переключаюсь между ними, он вызывает singlebook() в обоих маршрутах.

HTML :

  <a href="{{ route('book', $book->id) }}">Book</a>

 <a href="{{ route('bycats', $cat->id) }}">Category</a>

 

Комментарии:

1. Оба маршрута имеют только параметр, как laravel должен определять разницу между меткой и идентификатором?

Ответ №1:

Когда вы пытаетесь получить доступ к любому ресурсу, вы собираетесь записать маршрут в браузере, так что, если бы у меня было только два таких ресурса:

 Route::get('/book/{label}', [BookController::class, 'listbyCat'])->name('bycats');

Route::get('/book/{id}', [BookController::class, 'singlebook'])->name('book');
 

И я пытаюсь получить доступ localhost::8080/book/5

Итак, что говорит laravel из этого маршрута о том, что этот маршрут принадлежит какому из ресурсов?

Ничего!! Причина 5 может рассматриваться как label или id

Поэтому вам следует изменить маршрут, чтобы его можно было идентифицировать в laravel

Попробуйте изменить один из маршрутов, пример:

 Route::get('/book/by/{label}', [BookController::class, 'listbyCat'])->name('bycats');

Route::get('/book/{id}', [BookController::class, 'singlebook'])->name('book');
 

Комментарии:

1. Да, я так и понял. Но есть еще одна проблема, с которой я столкнулся, представления содержат изображение, и теперь, когда я исправил маршрутизацию, оно не показывает это изображение. Представления отображают данные нормально, за исключением изображения.

2. не могли бы вы привести пример, чтобы определить проблему, отредактировав свой вопрос или создав новый для новой проблемы?

3. @quoiqueprog вы, вероятно, используете относительный путь для изображения, поэтому теперь, когда базовый путь (текущий URI) имеет сегмент, который теперь относится к этому сегменту, используйте абсолютный путь, используя один из помощников URL

Ответ №2:

Должно быть очевидно, что, когда у laravel нет другого способа определить, какой маршрут вы хотите, он будет перенаправляться на первый, который у него есть в его таблице маршрутизации.

Это было бы простым обходным путем, который должен проиллюстрировать, чего вам не хватает.

 Route::get('/cat/{label}', [BookController::class, 'listbyCat'])-name('bycats');
Route::get('/book/{id}', [BookController::class, 'singlebook'])->name('book');
 

Artisan должен быть вашим инструментом перехода всякий раз, когда вы впервые сталкиваетесь с подобной проблемой.

 php artisan route:list