我最近将一个 Laravel 4.2 项目迁移到 5.0。到目前为止,我已经完成了所有必要的步骤,但我不断收到错误。
无法声明类 Controller,因为该名称已被使用
我的控制器已按照 laravel 在升级指南中提供的内容进行了更改。
<?php
use Illuminate\Foundation\Bus\DispatchesCommands;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
abstract class Controller extends BaseController {
use DispatchesCommands, ValidatesRequests;
}
我还将它添加到我的composer.json 的classmap 指令中。
"autoload": {
"classmap": [
"database",
"app/Http/Controllers"
],
"psr-4": {
"App\\": "app/"
}
},
到目前为止我找不到任何解决方案,所以如果你们知道该怎么做,这会对我有很大帮助:)提前感谢!
从类图中删除
"app/Http/Controllers"
。
在
namespace App\Http\Controllers;
块上方添加 use
。
然后运行
composer dump-auto
如果您的控制器位于文件夹而不是 app/Http/Controller 中,您应该像这样声明该命名空间:
namespace App\Http\Controllers\folderName;
注:
可能你正在扩展基础
Controller
所以你也应该添加这个:
use App\Http\Controllers\Controller;
否则会出现这个错误:
Class 'App\Http\Controllers\Controller' not found
我很确定你必须添加命名空间。
命名空间
默认情况下,Laravel 4 应用程序不会在应用程序代码中使用命名空间。例如,所有 Eloquent 模型和控制器都位于“全局”命名空间中。为了更快地迁移,您也可以将这些类保留在 Laravel 5 的全局命名空间中。
我和你有同样的问题,这是我的解决方案,也许它可以帮助你。
添加命名空间App\Http\Controllers;下
创建自动发现事件及其侦听器类时,只需在侦听器类顶部添加以下命名空间即可避免此错误:
namespace App\Listeners;
如果您使用的是 Laravel 8 或以上版本,可以使用匿名迁移来避免类名冲突。
以下是如何声明匿名迁移。不要忘记末尾的分号。
return new class extends Migration{
//
};