原文地址: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';
关注我每天分享文章。