【问题标题】:Can I use same controller name 2 or more times in laravel?我可以在 laravel 中使用相同的控制器名称 2 次或更多次吗?
【发布时间】:2021-01-19 16:33:24
【问题描述】:

我在 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']);

注意:文件夹和控制器名称仅作假设。

【问题讨论】:

  • 您可以为控制器命名您想要的名称,但您的 use 语句是一个别名,因此您将这两个控制器都别名为 Login,您不能这样做,因为名称已经存在在第一个别名之后...您必须将第二个别名别名为不同的名称
  • 你为控制器更改了namespace 吗?
  • @lagbox 有 2 种不同的 use 语句。 use App\Http\Controllers\my_controller1\Login;use App\Http\Controllers\my_controller2\Login;
  • 再次 ... use 语句是一个“别名” ... use App\Http\Controllers\my_controller1\Login IS use App\Http\Controllers\my_controller1\Login as Login; ... 这就是该语句的作用 ... 所以你的 use 语句都是试图将每个中的Login 控制器别名为Login,在第一个使用语句Login 已经使用之后,您不能这样做(如错误所示)
  • @noor 是的,2 个控制器有不同的命名空间

标签: php laravel routes laravel-controller


【解决方案1】:

您可以通过像这样导入它们来给它们起不同的名称

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)。

【讨论】:

  • 好的,但我仅使用名称作为示例。此名称不是我的实际控制器名称和文件夹名称。
  • 你拯救了我的一天!我正在将 Laravel 7 转换为 Laravel 8。它帮助我在不同文件夹(如管理员、学生等)下使用相同的控制器进行修复
【解决方案2】:

有 2 种不同的使用说明。 use App\Http\Controllers\my_controller1\Login;use App\Http\Controllers\my_controller2\Login;

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

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

【讨论】:

  • 我工作,但我想问为什么当我使用不同命名空间的 2 个不同的 use(..\my_controller1\.. 和 ..\my_controller2\..) 语句时它会显示错误.
  • @user2729017 我在 cmets 中解释了原因
猜你喜欢
  • 2014-08-03
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 2014-08-26
  • 2015-05-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多