Я использую автозагрузчик 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');