#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']);
Ответ №2:
Попробуйте выполнить эту команду для восстановления кэша маршрутов
php artisan route:cache
Ответ №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,
]);