ошибка 404 при создании нового маршрута, Laravel

#php #laravel

Вопрос:

похоже, что, когда я создал новый маршрут, я получаю ошибку 404 при попытке доступа к URL-адресу, что забавно, потому что все мои другие маршруты работают просто отлично.

 <?php

use IlluminateSupportFacadesAuth;
use IlluminateSupportFacadesRoute;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
*/

$ads_controller = 'AppHttpControllersAdsController@';

$favorites_controller = 'AppHttpControllersFavoritesController@';

Route::get('/', $ads_controller.'index')->name('index');

Route::get('/ads/favorites', $favorites_controller.'index');


Route::get('/ads/create', $ads_controller.'create')->name('ads.create');

Route::post('/', $ads_controller.'store')->name('ads.store');

Route::get('/ads/{id}', $ads_controller.'show')->where('id', '[0-9] ');;

Route::get('/ads/{id}/edit', $ads_controller.'edit')->where('id', '[0-9] ');;

Route::put('/ads/{id}', $ads_controller.'update')->where('id', '[0-9] ');;

Route::delete('/ads/{id}', $ads_controller.'destroy')->where('id', '[0-9] ');;

Route::get('/ajax/popupimgs', $ads_controller.'get_images');


Auth::routes([
    'register' => true,
]);
 

Тот, который НЕ работает, когда я в гостях http://127.0.0.1:8000/ads/favorites является:

 $favorites_controller = 'AppHttpControllersFavoritesController@';
Route::get('/ads/favorites', $favorites_controller.'index');
 

Контроллер выглядит так:

 <?php
namespace AppHttpControllers;

use AppModelsFavorites;
use BarryvdhDebugbarFacade as DebugBar;
use IlluminateHttpRequest;

class FavoritesController extends Controller
{
    // favorites page
    public function index()
    {
        return view('ads.favorites');
    }
}
 

вот что я получаю:
введите описание изображения здесь

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

1. Вы очистили/восстановили кэш маршрутов? php artisan route:cache ?

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

3. вы можете просмотреть доступные маршруты через artisan с php artisan route:list помощью , затем вы можете увидеть название каждого отдельного маршрута

Ответ №1:

Для laravel 8 Вы, возможно, захотите сделать

 Route::get('ads/favorites', [AppHttpControllersFavoritesController::class, 'index']);
 

https://laravel.com/docs/8.x/routing#view-routes

Ответ №2:

Попробуйте выполнить эту команду для восстановления кэша маршрутов

 php artisan route:cache
 

https://laravel.com/docs/8.x/routing#route-caching

Ответ №3:

Порядок маршрутов ИМЕЕТ ЗНАЧЕНИЕ. Переместите свой первый маршрут

 Route::get('/', $ads_controller.'index')->name('index');
 

после маршрута

 Route::get('/ads/favorites', $favorites_controller.'index');
 

Здесь происходит то, что ваш первый маршрут сначала улавливает все запросы GET.

Попробуйте с этим

 <?php

use IlluminateSupportFacadesAuth;
use IlluminateSupportFacadesRoute;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
*/

$ads_controller = 'AppHttpControllersAdsController@';

$favorites_controller = 'AppHttpControllersFavoritesController@';

Route::get('/ads/favorites', $favorites_controller.'index');

Route::get('/ads/create', $ads_controller.'create')->name('ads.create');

Route::post('/', $ads_controller.'store')->name('ads.store');

Route::get('/ads/{id}', $ads_controller.'show')->where('id', '[0-9] ');;

Route::get('/ads/{id}/edit', $ads_controller.'edit')->where('id', '[0-9] ');;

Route::put('/ads/{id}', $ads_controller.'update')->where('id', '[0-9] ');;

Route::delete('/ads/{id}', $ads_controller.'destroy')->where('id', '[0-9] ');;

Route::get('/ajax/popupimgs', $ads_controller.'get_images');

Route::get('/', $ads_controller.'index')->name('index');


Auth::routes([
    'register' => true,
]);