原文地址:https://www.wjcms.net/archive...

在Laravel的晚期版本中,RouteServiceProvider蕴含一个$namespace属性。该属性的值将主动增加到控制器路由定义和对actionhelper /办法的调用之前。

在Laravel 8.x中,默认状况下为此属性。这意味着Laravel不会主动命名空间前缀。因而,在新的Laravel 8.x应用程序中,应应用规范的PHP可调用语法定义控制器路由定义:URL::actionnull

被正文掉了。

所以在laravel8中加载路由须要加上命名空间,如下。

use App\Http\Controllers\Admin\AdminController;Route::get('/admin', [AdminController::class, 'index']);

或者也能够

use App\Http\Controllers\Admin;# 注:这里第二个参数是数组Route::get('/admin', [Admin\AdminController::class, 'index']);

如果是资源路由,则要:

# 留神这里第二个参数是类,字符串,不要传数组 Route::resource('/admin', Admin\AdminController::class);

对action相干办法的调用应应用雷同的可调用语法:

action([Admin\AdminController::class, 'index']);return Redirect::action([Admin\AdminController::class, 'index']);

留神

如果您更喜爱Laravel 7.x款式控制器的路由前缀,则能够简略地将$namespace属性增加到应用程序的中RouteServiceProvider。
门路为:

app/Providers/RouteServiceProvider.php

找到该文件,将被正文的一行代码勾销正文即可应用之前版本的主动载入命名空间的写法。29行

// protected $namespace = 'App\\Http\\Controllers';

关注我每天分享文章。