Невозможно объявить класс Controller, так как имя уже используется

Я недавно перенес проект 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;

}

Также я добавил его в директиву classmap моего composer.json.

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

Пока я не смог найти никакого решения, так что, если вы, ребята, знаете, что делать, это бы мне очень помогло:) заранее спасибо!

7 ответов

Решение

Удалить "app/Http/Controllers" из вашей карты классов.

добавлять namespace App\Http\Controllers; выше вашего use блоки.

Тогда беги composer dump-auto

Если у вас есть контроллер внутри папки вместо app / Http / Controller, вы должны объявить это пространство имен следующим образом:

      namespace App\Http\Controllers\folder-name;

Примечание:

Добавьте это также:

      use App\Http\Controllers\Controller;

В противном случае возникает эта ошибка:

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

Я уверен, что вы должны добавить пространства имен.

Пространства имен

По умолчанию приложения Laravel 4 не используют пространство имен в коде вашего приложения. Так, например, все модели и контроллеры Eloquent просто жили в "глобальном" пространстве имен. Для более быстрой миграции вы можете просто оставить эти классы в глобальном пространстве имен в Laravel 5.

У меня та же проблема, что и у вас, и это мое решение, чтобы исправить это, возможно, оно вам поможет. Добавить пространство имен App\Http\Controllers; под <?php

При создании событий автоматического обнаружения и их классов слушателей просто добавьте пространство имен ниже в верхней части класса слушателя, чтобы избежать этой ошибки:

namespace App\Listeners;

Если вы используете Laravel 8 или более позднюю версию, вы можете использовать анонимную миграцию, чтобы избежать конфликта с именем класса.

Ниже описано, как объявить анонимную миграцию. Не забудьте точку с запятой в конце.


      return new class extends Migration{
    //
};

У меня была эта проблема на сервере Windows 2012

когда я использую xdebug

я начинаю отладку и все работает хорошо

в моем контроллере нет проблем

<?php

namespace App\Http\Controllers;


use Illuminate\Routing\Controller as BaseController;
use Illuminate\Http\Request;

class HomeController extends BaseController

{
Другие вопросы по тегам