如何在 Laravel 8 中使用旧的 Laravel 路由样式
How to use old Laravel routing style in Laravel 8
我刚刚安装了 Laravel 8,在这个版本中,我必须像这样输入我的路线:
Route::get('/admin/panel', [App\Http\Controllers\Admin\PanelController::class, 'index']);
但我已经习惯了 Laravel 5 看起来像这样的路线:
Route::namespace('Admin')->prefix('admin')->group(function () {
Route::get('/panel', 'Admin/PanelController@index');
});
那么如何在 Laravel 8 版本中使用此 Laravel 5 路由?
您仍然可以在某种程度上使用它(例如,对路由进行分组和前缀),但是因为您使用的是 FQCN,所以命名空间是多余的。使用“新”路由相对于“旧”路由的主要优势是重构。当您使用支持重构(如 PhpStorm)的 IDE 移动或重命名控制器时,您不需要手动更改控制器的名称和组命名空间。
在 Laravel 5 中,您也可以使用此路由表示法,但文档中未对其进行概述。
要获得类似的感觉,请导入命名空间并仅使用您的 class 名称并删除定义中的命名空间组。
use App\Http\Controllers\Admin\PanelController;
Route::prefix('admin')->group(function () {
Route::get('panel', [PanelController::class, 'index']);
});
如果您不能接受定义路由的新方法,请取消注释 app/Providers/RouteServiceProvider.php
中的 $namespace
属性,然后您又回到了旧方法。
如果您想继续使用“旧”方式定义路线(即 Controller@action
),那么您可以这样做,但您需要更改 RouteServiceProvider
以包含 App\Http\Controllers
命名空间。
这是非常简单的,对于 Laravel 8 的更新版本来说,这是取消注释以下行的简单情况:
protected $namespace = 'App\Http\Controllers';
如果您使用的 Laravel 8 版本在 RouteServiceProvider
文件中没有此行,您可以升级 Laravel 版本或手动添加它。如果您手动添加该行,您还需要更新 boot
方法中的 Route
定义以使用 $namespace
属性。同样,这非常简单,只需将以下内容添加到 web
和 api
定义中:
->namespace($this->namespace)
例如:
Route::middleware('web')
->namespace($this->namespace)
->group(base_path('routes/web.php'));
那你应该可以走了。
我刚刚安装了 Laravel 8,在这个版本中,我必须像这样输入我的路线:
Route::get('/admin/panel', [App\Http\Controllers\Admin\PanelController::class, 'index']);
但我已经习惯了 Laravel 5 看起来像这样的路线:
Route::namespace('Admin')->prefix('admin')->group(function () {
Route::get('/panel', 'Admin/PanelController@index');
});
那么如何在 Laravel 8 版本中使用此 Laravel 5 路由?
您仍然可以在某种程度上使用它(例如,对路由进行分组和前缀),但是因为您使用的是 FQCN,所以命名空间是多余的。使用“新”路由相对于“旧”路由的主要优势是重构。当您使用支持重构(如 PhpStorm)的 IDE 移动或重命名控制器时,您不需要手动更改控制器的名称和组命名空间。
在 Laravel 5 中,您也可以使用此路由表示法,但文档中未对其进行概述。
要获得类似的感觉,请导入命名空间并仅使用您的 class 名称并删除定义中的命名空间组。
use App\Http\Controllers\Admin\PanelController;
Route::prefix('admin')->group(function () {
Route::get('panel', [PanelController::class, 'index']);
});
如果您不能接受定义路由的新方法,请取消注释 app/Providers/RouteServiceProvider.php
中的 $namespace
属性,然后您又回到了旧方法。
如果您想继续使用“旧”方式定义路线(即 Controller@action
),那么您可以这样做,但您需要更改 RouteServiceProvider
以包含 App\Http\Controllers
命名空间。
这是非常简单的,对于 Laravel 8 的更新版本来说,这是取消注释以下行的简单情况:
protected $namespace = 'App\Http\Controllers';
如果您使用的 Laravel 8 版本在 RouteServiceProvider
文件中没有此行,您可以升级 Laravel 版本或手动添加它。如果您手动添加该行,您还需要更新 boot
方法中的 Route
定义以使用 $namespace
属性。同样,这非常简单,只需将以下内容添加到 web
和 api
定义中:
->namespace($this->namespace)
例如:
Route::middleware('web')
->namespace($this->namespace)
->group(base_path('routes/web.php'));
那你应该可以走了。