【问题标题】:getting 404 error when creating new route, Laravel创建新路线时出现404错误,Laravel
【发布时间】:2021-08-25 03:30:57
【问题描述】:

似乎当我创建一个新路由时,我在尝试访问该 url 时收到 404 错误,这很有趣。因为我所有其他路线都运行良好。

<?php

use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Route;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
*/

$ads_controller = 'App\Http\Controllers\AdsController@';

$favorites_controller = 'App\Http\Controllers\FavoritesController@';

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 = 'App\Http\Controllers\FavoritesController@';
Route::get('/ads/favorites', $favorites_controller.'index');

控制器如下所示:

<?php
namespace App\Http\Controllers;

use App\Models\Favorites;
use Barryvdh\Debugbar\Facade as DebugBar;
use Illuminate\Http\Request;

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

这就是我得到的:

【问题讨论】:

  • 你清除/重建路由缓存了吗? php artisan route:cache ?
  • 有时我必须停止并重新启动我的本地环境。这很可能是本地缓存问题。
  • 您可以使用php artisan route:list查看通过工匠的可用路线,然后您可以看到每条路线的名称

标签: php laravel


【解决方案1】:

对于 laravel 8 你可能想做的事

Route::get('ads/favorites', [App\Http\Controllers\FavoritesController::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 Illuminate\Support\Facades\Auth;
      use Illuminate\Support\Facades\Route;
      /*
      |--------------------------------------------------------------------------
      | Web Routes
      |--------------------------------------------------------------------------
      */
      
      $ads_controller = 'App\Http\Controllers\AdsController@';
      
      $favorites_controller = 'App\Http\Controllers\FavoritesController@';
      
      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,
      ]);
      

      【讨论】:

        猜你喜欢
        • 2019-12-01
        • 2018-10-23
        • 1970-01-01
        • 2020-02-09
        • 2022-06-15
        • 2019-12-25
        • 1970-01-01
        • 2021-10-12
        • 1970-01-01
        相关资源
        最近更新 更多