#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.
Я только что удалил один класс из файла, и теперь все работает нормально.
Спасибо!