Как использовать Composer для автозагрузки классов извне поставщика?

Я использую автозагрузчик psr-4 от композитора:

 "autoload": { "psr-4": { "DG\\Munchkin\\": "src/DG/Munch/" } } 

Это загружает классы из /var/www/html/xxx/vendor/yyy/src/DG/Munch

Но как я могу загружать классы из /var/www/html/xxx/ ?

Я написал свой автозагрузчик, но когда мне нужен vendor/autoload.php ( vendor/autoload.php композитора) и мой автозагрузчик, он не будет работать, пока я не создам экземпляр класса в моем собственном автозагрузчике.

Каталог src будет в корне вашего проекта. Он находится на том же уровне, что и каталог vendor .

Если вы определите

 "autoload": { "psr-4": { "DG\\Munchkin\\": "src/DG/Munch/" } } 

это не будет загружать классы из /var/www/html/xxx/vendor/yyy/src/DG/Munch , как вы заявили.

Потому что ваша структура проекта:

 /var/www/html/ +- /xxx (project) - composer.json +- /src +- DG +- Munch +- /vendor - autoload.php +- vendor-projectA +- vendor-projectB +- yyy 

Пространство имен \DG\Munchkin будет отображаться в классах внутри

/var/www/html/xxx/src/DG/Munch а не внутри

/var/www/html/xxx/vendor/yyy/src/DG/Munch .

Но как я могу загружать классы из / var / www / html / xxx /?

Определите пути в файле composer.json (внутри / var / www / html / xxx /) вашего проекта:

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

или загрузите автозагрузчик композитора в index.php или во время его загрузки и добавьте пути вручную:

 $loader = require 'vendor/autoload.php'; $loader->add('Namespace\\Somewhere\\Else\\', __DIR__); $loader->add('Namespace\\Somewhere\\Else2\\', '/var/www/html/xxx'); 

Ссылка: https://getcomposer.org/doc/04-schema.md#autoload