无法声明类Controller,因为该名称已被使用

问题描述 投票:0回答:6

我最近将一个 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/"
    }
},

到目前为止我找不到任何解决方案,所以如果你们知道该怎么做,这会对我有很大帮助:)提前感谢!

laravel laravel-5
6个回答
39
投票

从类图中删除

"app/Http/Controllers"

namespace App\Http\Controllers;
块上方添加
use

然后运行

composer dump-auto


12
投票

如果您的控制器位于文件夹而不是 app/Http/Controller 中,您应该像这样声明该命名空间:

namespace App\Http\Controllers\folderName;

注:

可能你正在扩展基础

Controller
所以你也应该添加这个:

use App\Http\Controllers\Controller;

否则会出现这个错误:

 Class 'App\Http\Controllers\Controller' not found 

10
投票

我很确定你必须添加命名空间。

命名空间

默认情况下,Laravel 4 应用程序不会在应用程序代码中使用命名空间。例如,所有 Eloquent 模型和控制器都位于“全局”命名空间中。为了更快地迁移,您也可以将这些类保留在 Laravel 5 的全局命名空间中。


1
投票

我和你有同样的问题,这是我的解决方案,也许它可以帮助你。 添加命名空间App\Http\Controllers;下

创建自动发现事件及其侦听器类时,只需在侦听器类顶部添加以下命名空间即可避免此错误:

namespace App\Listeners;

0
投票

0
投票

如果您使用的是 Laravel 8 或以上版本,可以使用匿名迁移来避免类名冲突。

以下是如何声明匿名迁移。不要忘记末尾的分号。


return new class extends Migration{
    //
};
© www.soinside.com 2019 - 2024. All rights reserved.