php - ¿Cómo uso Composer para cargar automáticamente las clases desde fuera del proveedor?
composer-php autoload (1)
Yo uso el cargador automático psr-4
del compositor:
"autoload": {
"psr-4": {
"DG//Munchkin//": "src/DG/Munch/"
}
}
Esto carga las clases de /var/www/html/xxx/vendor/yyy/src/DG/Munch
Pero, ¿cómo puedo cargar clases desde /var/www/html/xxx/
?
Escribí mi propio cargador automático, pero cuando necesito el vendor/autoload.php
( vendor/autoload.php
compositor) y mi cargador automático, no funcionará hasta que cree una instancia de una clase en mi propio cargador automático.
El directorio src
estaría en la raíz de su proyecto. Está en el mismo nivel que el directorio de vendor
.
Si usted define
"autoload": {
"psr-4": {
"DG//Munchkin//": "src/DG/Munch/"
}
}
esto no cargará clases de /var/www/html/xxx/vendor/yyy/src/DG/Munch
, como ha dicho.
Porque la estructura de tu proyecto es:
/var/www/html/
+- /xxx (project)
- composer.json
+- /src
+- DG
+- Munch
+- /vendor
- autoload.php
+- vendor-projectA
+- vendor-projectB
+- yyy
El espacio de nombres /DG/Munchkin
se asignaría a las clases dentro de
/var/www/html/xxx/src/DG/Munch
y no dentro
/var/www/html/xxx/vendor/yyy/src/DG/Munch
.
Pero, ¿cómo puedo cargar clases desde / var / www / html / xxx /?
Defina las rutas en el composer.json (dentro de / var / www / html / xxx /) de su proyecto:
"autoload": {
"psr-4": {
"ProjectRoot//" : "",
"NamspaceInSourceDir//" : "src/"
}
}
o cargue el autocargador compositor en su index.php o durante su arranque y agregue las rutas manualmente:
$loader = require ''vendor/autoload.php'';
$loader->add(''Namespace//Somewhere//Else//', __DIR__);
$loader->add(''Namespace//Somewhere//Else2//', ''/var/www/html/xxx'');
Referencia: getcomposer.org/doc/04-schema.md#autoload