我可以在laravel中使用2次或多次使用相同的控制器名称吗?

问题描述

我在laravel 8项目的2个不同的文件夹中具有相同的控制器名称(假设Login.PHP)。在路由中,如果我按以下方式使用它们,则会显示错误

use App\Http\Controllers\my_controller1\Login;
use App\Http\Controllers\my_controller2\Login;

错误看起来像

Symfony \ Component \ ErrorHandler \ Error \ FatalError

无法使用App \ Http \ Controllers \ my_controller2 \ Login作为登录名,因为 名称已经被使用

如果我以以下方式使用,它不会显示错误

use App\Http\Controllers\my_controller1\Login;

Route::get('/loginA',[App\Http\Controllers\my_controller2\Login::class,'abc']);

Route::get('/loginB',[Login::class,'abc']);

注意:文件夹和控制器名称仅供参考。

解决方法

有2种不同的use语句。 use App\Http\Controllers\my_controller1\Login;use App\Http\Controllers\my_controller2\Login;

如果您要在同一个文件中同时使用它们,则需要为其中之一加上别名。

use App\Http\Controllers\my_controller2\Login as Login2;
,

您可以通过这样导入它们来为其赋予不同的名称

use App\Http\Controllers\my_controller1\Login as Login1;
use App\Http\Controllers\my_controller2\Login as Login2;

但是,不需要两个具有相同名称的控制器,因为这表明它们对同一件事负责,并且很可能可以合并。

此外,您的命名似乎有点偏离;考虑将camelCase用于文件夹名称(例如,\customControllers\而不是\my_controller1\)和命名控制器LoginController而不是Loginsee naming conventions for Laravel)。