原文地址:https://www.wjcms.net/archives/laravel8更新之路由調整
在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';
關注我每天分享文章。