Laravel 8 中的路由组命名空间

Route group namespace in Laravel 8

我正在尝试在 laravel

中定义命名空间

旧版本

Route::group('namespace' => 'RoleA'], function() {
    Route::get('/', 'HomeController@index']);
    // call RoleA/HomeController
});

laravel 8

use App\Http\Controllers\RoleA\HomeController;
use App\Http\Controllers\RoleB\HomeController;
// return error => HomeController already in use

Route::group('namespace' => 'RoleA'], function() {
    Route::get('/', [HomeController::class, 'index']);
    // call RoleA/HomeController
});

Route::group('namespace' => 'RoleB'], function() {
    Route::get('/', [HomeController::class, 'index']);
    // still call RoleA/HomeController
});

在 Laravel 8 中是否有其他使用命名空间的方法或正确方法?

编辑,抱歉问题有歧义

我的意思是像旧版本一样,在定义命名空间时 类似这样,或者看上面的旧版本

Route::group('namespace' => 'RoleB'], function() {
    Route::get('/', [RoleB/HomeController::class, 'index']);
    // will call RoleB/HomeController
});

有没有办法实现类似上面代码的东西?

对于return错误,按如下方式导入控制器(不能导入同名的类。所以你应该使用别名)

use App\Http\Controllers\RoleA\HomeController as HomeControllerA;
use App\Http\Controllers\RoleB\HomeController as HomeControllerB;

然后您可以创建路由组 this

Route::prefix('RoleA')->group(function () {
    Route::get('/', function () {
        // Matches The "/RoleA" URL
    });
});

您可以使用命名空间如下

Route::group(['namespace' => 'HomeControllerA'], function()
{
    Route::get('/RoleA', [HomeController::class, 'index']);
}

我认为 laravel 放弃该功能,因为在 laravel 8 中,控制器将是面向对象的 class

Laravel 路由 7.* 文档。

Laravel 路由 8.* 文档。

导入控制器如下-


use App\Http\Controllers\Admin\TestController as TestControllerAdmin;
use App\Http\Controllers\Employee\TestController as TestControllerEmployee;

Route::group(["prefix"=>"admin"], function(){
    Route::get('index',  [TestControllerAdmin::class, 'index']);
});
Route::group(["prefix"=>"employee"], function(){
    Route::get('index',  [TestControllerEmployee::class, 'index']);
});