【问题标题】:Cannot declare class Controller, because the name is already in use无法声明类 Controller,因为该名称已在使用中
【发布时间】:2023-03-14 20:15:02
【问题描述】:

我最近将一个 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 的类映射指令中。

"autoload": {
    "classmap": [
        "database",
        "app/Http/Controllers"
    ],
    "psr-4": {
        "App\\": "app/"
    }
},

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

【问题讨论】:

  • 注意缺少的命名空间
  • 有时尽管有命名空间但命名空间的路径不正确,也会发生此错误!就我而言,我将控制器放在一个子文件夹中,却忘记更正/更新它的新命名空间!命名空间 App\Http\Controllers\Sub_Dir\Name_Of_Controller.php

标签: laravel laravel-5


【解决方案1】:

从你的类图中删除"app/Http/Controllers"

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

然后运行composer dump-auto

【讨论】:

  • 这让我不得不在我的 routes.php 中编写控制器的整个路径是正常行为吗?
  • 在您的 app/Providers/RouteServiceProvider.php 中包含 routes.php 并在路由组中定义命名空间,例如:
  • $router-&gt;group(['namespace' =&gt; 'App\Http\Controllers'], function ($router) { require app_path('Http/routes.php'); });
  • 受保护的 $namespace = 'App\Http\Controllers';在 RouteServiceProvider 中成功了
  • 是的!添加的另一个很酷的事情是,如果您添加更多路由组,您可以为所有这些控制器使用另一个命名空间,或者如果该命名空间在该路由文件中,则扩展该命名空间。所以你可以做['namespace' =&gt; 'Api'],它将在App\Http\Controllers\Api命名空间中引用你的控制器
【解决方案2】:

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

命名空间

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

【讨论】:

  • 通常是命名空间问题,因此请确保在文件顶部定义命名空间
  • 这是因为您在文件夹中有用户模型,而不是直接在 /App....
【解决方案3】:

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

namespace App\Listeners;

【讨论】:

    【解决方案4】:

    我在 windows 2012 Server 上遇到了这个问题

    当我使用 xdebug 时

    我开始调试,一切正常

    我的控制器没有问题

    <?php
    
    namespace App\Http\Controllers;
    
    
    use Illuminate\Routing\Controller as BaseController;
    use Illuminate\Http\Request;
    
    class HomeController extends BaseController
    
    {
    

    【讨论】:

      【解决方案5】:

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

      namespace App\Http\Controllers\folder-name;
      

      注意:

      也添加这个:

      use App\Http\Controllers\Controller;
      

      否则会出现这个错误:

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

      【讨论】:

        猜你喜欢
        • 2021-08-17
        • 2020-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-29
        相关资源
        最近更新 更多