问题描述
我在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
而不是Login
(see naming conventions for Laravel)。