Класс Composer не найден, даже если он существует - PullRequest
2 голосов
/ 28 июня 2019

Я разрабатываю пакет Laravel, но у меня проблема с автозагрузкой композитора. В моем пакете 2 папки в папке src. Один из них называется Laravel, а другой - Telegram. Вот структура пакета:

./packages
.../typhoon
...../src
......./Laravel
........./Providers
............LumenServiceProvider.php
............LaravelServiceProvider.php
......./Telegram
..........Api.php
.....composer.json

Этот пакет разработан под SaliBhdr/Typhoon пространством имен.

Я добавил каталог packages/typhoon/src в файл композитора Laravel следующим образом:

    "autoload": {
        "psr-4": {
            "App\\": "app/",
            "SaliBhdr\\Typhoon\\" : "packages/typhoon/src/"
        }
    },

И добавьте адрес src/ в файл пакета composer.json следующим образом:

    "autoload": {
        "psr-4": {
            "SaliBhdr\\Typhoon\\": "src/"
        }
    },

Вот тут начинается странное поведение. Когда я выполняю команду php artisan serve, Laravel выдает ошибку, которая говорит:

 Class 'Salibhdr\Typhoon\Laravel\Providers\LumenServiceProvider' not found 

И если я проверю, существует ли класс с функцией class_exists('Salibhdr\Typhoon\Laravel\Providers\LumenServiceProvider'), он возвращает false. Но если я проверю, существует ли Salibhdr\Typhoon\Telegram\Api, он вернет true.

Я проверил файл autoload_classmap и заметил, что композитор включает все классы в подпапке Telegram, но не в подпапке Laravel.

Почему композитор ведет себя так странно? почему он включает одну подпапку, а не другую? Это то, чем я занимаюсь каждый день, и никогда не видел ничего подобного.

Мне отчаянно нужна помощь. Любая помощь будет оценена

1 Ответ

0 голосов
/ 28 июня 2019

Вы пытаетесь инициализировать Salibhdr\Typhoon\Laravel\Providers\LumenServiceProvider, но в вашем композиторе это "SaliBhdr\\Typhoon\\": "src/".

Обратите внимание на заглавную B в вашем композиторе. Классы PHP чувствительны к регистру, поэтому вы должны убедиться, что они либо в нижнем, либо в верхнем регистре.

Также обязательно запустите composer dumpautoload, если вы измените composer.json.

...