2015-05-18 3 views
0

Я добавил композитор к существующему проекту, который использует функцию автозагрузки PHP. Теперь, когда используется композитор autoload.php, я удалил свою старую функцию автозагрузки, и я пытаюсь загрузить существующий исходный каталог с помощью автозагрузки композитора, но он не подбирает ни один из моих существующих классов источников.Ошибка автозагрузки Composer

Все, что установлено композитором, загружается точным образом и может быть доступно через пространства имен и т. Д., Так что только существующие источники в исходной папке не подбираются. Какие-либо предложения?

Я рассмотрел несколько других вопросов о композиторе в stackoverflow, но ничто из того, что я прочитал, не решило мою проблему.

структура файла:

index.php 
root/ 
     sources/ 
     vendor/ 
     composer.json 
media/ 

Композитор автозагрузку:

"autoload": { 
    "psr-0": { 
     "" : "sources/" 
    } 
} 
+0

Где находятся ваши классы, и что они называются? Вы следуете стандартам PSR-0 для макета маршрута и имени файла? – Sven

+0

Все исходные файлы находятся в следующем формате: «classname.class.php», имя класса - это имя, используемое в классе. – llanato

+3

Это не PSR-0, поэтому его нормальный, что Composer не может его загрузить. Вместо этого используйте «classmap» и имейте в виду, что вам нужно запускать 'composer dump-autoload' каждый раз, когда вы добавляете новый класс. Или переименуйте файлы, чтобы они были похожи на схему PSR-0 (рекомендуется). – Sven

ответ

1

Были две вещи, которые вызывают проблемы для меня, один был имена файлов класса и второй была команда композитор, который необходимо запустить.

Мои имена файлов класса были в формате {classname}.class.php, когда они должны быть в формате, PSR-0, который ожидает Classname.php (заглавной первую букву) и, в свою очередь имя_класса в файле класса следует имя файла.

class Classname 
{ 
    ... 

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

composer dump-autoload 

От composer.org:

If you need to update the autoloader because of new classes in a classmap package for example, you can use "dump-autoload" to do that without having to go through an install or update.

1

Если ваша структура кода слишком сложна для преобразования в PSR-* структуру, вы можете использовать свой старый автозагрузчика и композитор автозагрузку вместе.

spl_autoload_register(function ($class) { 
    $file = "sources/" . $class . ".class.php"; 
    if (file_exists($file)) { 
     require $file; 
     return; 
    } 
}); 
require "vendor/autoload.php"; 
+1

Classmap autoloading из Composer почти всегда будет работать со старыми кодами - не нужно использовать устаревший автозагрузчик. – Sven