Как использовать 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
(composer autoload) и мой автозагрузчик, он не будет работать, пока я не создам экземпляр класса в моем собственном автозагрузчике.
1 ответ
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/"
}
}
или загрузите автозагрузчик composer в ваш index.php или во время его начальной загрузки и добавьте пути вручную:
$loader = require 'vendor/autoload.php';
$loader->add('Namespace\\Somewhere\\Else\\', __DIR__);
$loader->add('Namespace\\Somewhere\\Else2\\', '/var/www/html/xxx');