Работоспособность маршрута в laravel зависит от порядка описания маршрутов?

Господа, объясните мне пожалуйста, что за дурь с роутингом в ларавел творится? Сделал 2 дополнительных метода, добавил маршрут в web.php - при обращении - 404!

 Route::get('/cars/create', [CarController::class, 'create']);
 Route::post('/cars', [CarController::class, 'store']);
 Route::get('/cars/{car}', [CarController::class, 'show'])->name('cars.show');
 Route::get('/cars/{car}/edit', [CarController::class, 'edit'])->name('cars.edit');
 Route::put('/cars/{car}', [CarController::class, 'update'])->name('cars.update');
 Route::delete('/cars/{car}', [CarController::class, 'destroy'])->name('cars.destroy');
 Route::get('/cars/trashed', [CarController::class, 'trashed'])->name('cars.trashed');
 Route::put('/cars/{car}/restore', [CarController::class, 'restore'])->name('cars.restore');

Нашёл тут же у одного человека, что он просто поменял строчки местами и всё заработало. Пробую, перенёс роут trashed выше, поставил после роута store

Route::get('/cars', [CarController::class, 'index']);
 Route::get('/cars/create', [CarController::class, 'create']);
 Route::post('/cars', [CarController::class, 'store']);
 Route::get('/cars/trashed', [CarController::class, 'trashed'])->name('cars.trashed');
 Route::get('/cars/{car}', [CarController::class, 'show'])->name('cars.show');
 Route::get('/cars/{car}/edit', [CarController::class, 'edit'])->name('cars.edit');
 Route::put('/cars/{car}', [CarController::class, 'update'])->name('cars.update');
 Route::delete('/cars/{car}', [CarController::class, 'destroy'])->name('cars.destroy');
 Route::put('/cars/{car}/restore', [CarController::class, 'restore'])->name('cars.restore');

Удивительно но роут trashed стал работать. Какая ей разница на какой строчке он находится? Он же есть! А вот роут restore - не работает никак, вообще, куда бы я его не переставлял. Это что за дурь?

Форма для вызова метода restore, точно такая же как для метода edit, который работает без проблем

<form action="{{ route('cars.restore', $car) }}" method="POST" style="display: inline-block">
                        @csrf
                        @method('PUT')
                        <button type="submit" class="btn btn-primary" onclick="return confirm('Are you sure?')">Restore</button>
                    </form>

php artisan route:list видит эти маршруты

php artisan route:list
 
  GET|HEAD  / ............................................ CarController@index
  POST      _ignition/execute-solution ignition.executeSolution › Spatie\Lara…
  GET|HEAD  _ignition/health-check ignition.healthCheck › Spatie\LaravelIgnit…
  POST      _ignition/update-config ignition.updateConfig › Spatie\LaravelIgn…
  GET|HEAD  api/user ......................................................... 
  GET|HEAD  cars ......................................... CarController@index
  POST      cars ......................................... CarController@store
  GET|HEAD  cars/create ................................. CarController@create
  GET|HEAD  cars/trashed ................ cars.trashed › CarController@trashed
  GET|HEAD  cars/{car} ........................ cars.show › CarController@show
  PUT       cars/{car} .................... cars.update › CarController@update
  DELETE    cars/{car} .................. cars.destroy › CarController@destroy
  GET|HEAD  cars/{car}/edit ................... cars.edit › CarController@edit
  PUT       cars/{car}/restore .......... cars.restore › CarController@restore
  GET|HEAD  home ................................. home › HomeController@index
  GET|HEAD  login ................. login › Auth\LoginController@showLoginForm
  POST      login ................................. Auth\LoginController@login
  POST      logout ...................... logout › Auth\LoginController@logout
  GET|HEAD  password/confirm password.confirm › Auth\ConfirmPasswordControlle…
  POST      password/confirm .......... Auth\ConfirmPasswordController@confirm
  POST      password/email password.email › Auth\ForgotPasswordController@sen…
  GET|HEAD  password/reset password.request › Auth\ForgotPasswordController@s…
  POST      password/reset password.update › Auth\ResetPasswordController@res…
  GET|HEAD  password/reset/{token} password.reset › Auth\ResetPasswordControl…
  GET|HEAD  register . register › Auth\RegisterController@showRegistrationForm
  POST      register ........................ Auth\RegisterController@register
  GET|HEAD  sanctum/csrf-cookie sanctum.csrf-cookie › Laravel\Sanctum › CsrfC…

php artisan route:clear не помогает


Ответы (1 шт):

Автор решения: Александр

Наверное, всё таки, это был какой-то кэш. Потому что в итоге у меня всё заработало вот в таком виде:

Route::get('/cars', [CarController::class, 'index']);
 Route::get('/cars/create', [CarController::class, 'create']);
 Route::post('/cars', [CarController::class, 'store']);
 Route::get('/cars/trashed', [CarController::class, 'trashed'])->name('cars.trashed');
 Route::get('/cars/{car}', [CarController::class, 'show'])->name('cars.show');
 Route::get('/cars/{car}/edit', [CarController::class, 'edit'])->name('cars.edit');
 Route::put('/cars/{car}/restore', [CarController::class, 'restore'])->name('cars.restore');
 Route::put('/cars/{car}', [CarController::class, 'update'])->name('cars.update');
 Route::delete('/cars/{car}', [CarController::class, 'destroy'])->name('cars.destroy');

Контроллер:

public function trashed()
    {

        $cars = Car::onlyTrashed()->get();
        $transmission = self::$transmission;
        return view('cars.trashed', compact('cars', 'transmission'));
    }

    public function restore(string $id)
    {
        //dd($request);
        $car = Car::withTrashed()->findOrFail($id);
        $car->restore();
        return redirect("/cars/");
    }

Тыкался, мучился, удалил все кэши, вьюшек, роутеров - и получил уже ошибку с контроллера - хотя бы попал туда. Там поправил и всё завелось.

→ Ссылка