Маршрут редактирования Laravel 9 с параметром {id} возвращает Not Found (404), несмотря на то, что он определен
Ниже приведен пример определения маршрута в моем файле route/web.php.
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\WidgetController;
Route::controller(WidgetController::class)->name('widgets.')->prefix('widgets')->group(function () {
Route::get('{id}/{slug}', 'show')->name('show');
Route::get('create', 'create')->name('create')->middleware('auth');
Route::post('store', 'store')->name('store')->middleware('auth');
Route::get('{id}/edit', 'edit')->name('edit')->middleware('auth');
Route::post('update', 'update')->name('update')->middleware('auth');
});
Все перечисленные маршруты работают нормально, кроме одного.
Route::get('{id}/edit', 'edit')->name('edit')->middleware('auth');
По какой-то причине он отлично работает, когда он написан так:
Route::get('{id}', 'edit')->name('edit')->middleware('auth');
или это:
Route::get('{id}//edit', 'edit')->name('edit')->middleware('auth');
С «Route::resource» по умолчанию будет первый «редактируемый» маршрут. Однако я получаю 404 при таком определении. Мой связанный метод контроллера написан так:
public function edit($id)
{
// Rest of code here
}
Может быть, Laravel ошибочно принимает «редактировать» за второй параметр? Но это не имеет особого смысла, учитывая, что это значение по умолчанию для метода ресурса.
1 ответ
Попробуйте поставить
Route::get('{id}/edit', 'edit')->имя
Выше
Route::get('{id}/{slug}'
Поскольку {slug} может быть чем угодно, скорее всего, он будет выполнен первым. Я бы предложил поставить это в последнюю очередь.