Работоспособность маршрута в 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/");
}
Тыкался, мучился, удалил все кэши, вьюшек, роутеров - и получил уже ошибку с контроллера - хотя бы попал туда. Там поправил и всё завелось.