Laravel 8使用旧版路由写法调用控制器报Target Class Not Found错误如何解决
Laravel 8 恢复旧版控制器路由写法解决方案
你的配置之所以报错,核心是两个问题:一是你在路由组中加了prefix('web')会给所有路由额外增加/web前缀;二是没有禁用RouteServiceProvider默认的web.php加载逻辑,路由被重复注册且默认加载的路由没有指定命名空间。以下是两种可行配置方案:
方案一:官方推荐修改RouteServiceProvider(最优)
- 打开
app/Providers/RouteServiceProvider.php文件 - 找到被注释的
$namespace属性,取消注释:
protected $namespace = 'App\\Http\\Controllers';
- 找到web路由加载的代码段,给路由组添加
->namespace($this->namespace)配置,修改后完整代码如下:
Route::middleware('web') ->namespace($this->namespace) ->group(base_path('routes/web.php'));
- 执行路由缓存清理命令生效:
php artisan route:clear
配置完成后即可直接在web.php中使用Route::get('/home', 'HomeController@index')->name('home');的旧风格写法。
方案二:修正AppServiceProvider中的现有配置
如果你不想修改RouteServiceProvider,需要调整现有代码并关闭默认路由加载:
- 先打开
RouteServiceProvider.php,注释掉原来加载web.php的代码段,避免路由重复注册 - 修改你在
AppServiceProvider.php中的代码,去掉多余的prefix('web')配置:
public function boot() { Route::middleware('web') ->namespace('App\Http\Controllers') ->group(base_path('routes/web.php')); }
- 执行路由缓存清理命令生效:
php artisan route:clear
补充说明:如果控制器存放在
Http/Controllers的子目录下,直接在路由中写子目录路径即可,比如后台控制器写为Route::get('/admin/login', 'Admin\LoginController@index');
内容的提问来源于stack exchange,提问作者Pouya Vaghefi
相关产品推荐
相关产品推荐

