Класс пользовательского пакета не будет автоматически загружаться с помощью автозагрузчика composer

#php #composer-php #autoload

#php #composer-php #автозагрузка

Вопрос:

Я пытаюсь опубликовать новый пакет на Packagist.org но у меня возникли некоторые проблемы с использованием системы автозагрузчика.

Пока я устанавливаю свой пакет (https://packagist.org/packages/gabyfle/gsteam-auth ) все в порядке, но когда я загружаю его через PHP :

 require __DIR__ . "/vendor/autoload.php";

$testing = new ClassSteamAuth('test', 'test');
 

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

 Fatal error: Uncaught Error: Class 'ClassSteamAuth' not found in <path>gSteam-testtesting.php:4 Stack trace: #0 {main} thrown in <path>gSteam-testtesting.php on line 4
 

Я уже перепробовал все различные соглашения о автозагрузке (PSR0 и PSR4), я также пытался включить свой класс в автозагрузчик через classmap параметр, но мой класс не загружается.

Есть ли у вас какие-либо идеи о том, как я могу сделать так, чтобы мой класс загружался через автозагрузчик composer?

Спасибо

Ответ №1:

Я бы посоветовал вам использовать автозагрузку PSR-4. Имейте в виду, что вы должны поместить конечные обратные косые черты в конце объявления пространства имен:

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

Цитата из документов composer:

Обратите внимание, что в отличие от более старого стиля PSR-0, префикс (Foo\) отсутствует в пути к файлу.

А также:

Префиксы пространства имен должны заканчиваться на , чтобы избежать конфликтов между похожими префиксами. Например, Foo будет соответствовать классам в пространстве имен FooBar, поэтому конечные обратные косые черты решают проблему: Foo и FooBar различны.

Так что имейте это в виду, если вы переключаетесь с psr-0 на psr-4

Комментарии:

1. Я переключился на psr-4 , но все еще есть эта ошибка… Класс вообще не загружается.

2. Вы тестируете его локально или устанавливаете через composer install? Если первый запускался composer dump-autoload для обновления изменений composer?

3. Я тестирую его локально. Я запустил composer dump-autoload , и он говорит, что мои 2 класса были загружены. Но это странно, поскольку у меня всего 3 класса: 2 для моей собственной библиотеки и 1 для зависимости

4. Не могли бы вы опубликовать свою структуру файлов / папок? Когда я загрузил ваш пакет с Github, отредактировал composer.json с тем, что я добавил в свой ответ, запустил composer dump-autoload , и все заработало. Поэтому я не могу воспроизвести ошибку. Возможно, вы также могли бы загрузить всю папку тестирования на github в его собственном тестовом репозитории

Ответ №2:

Благодаря @mdexp я нашел, что не так с моим классом. Я определял два класса в одном файле, и это не соответствует норме PSR-4.

Я только что удалил один класс из файла, и теперь все работает нормально.

Спасибо!