J'utilise psr-4
chargeur automatique du compositeur:
"autoload": {
"psr-4": {
"DG\\Munchkin\\": "src/DG/Munch/"
}
}
Cela charge les classes de /var/www/html/xxx/vendor/yyy/src/DG/Munch
Mais comment puis-je charger des classes à partir de /var/www/html/xxx/
?
J'ai écrit mon propre chargeur automatique, mais quand j'ai besoin de vendor/autoload.php
(composeur autoload) et mon autoloader, cela ne fonctionnera pas tant que je n'aurai pas créé d'instance d'une classe dans mon propre autoloader.
Le répertoire src
se trouverait à la racine de votre projet. C'est au même niveau que le répertoire vendor
.
Si vous définissez
"autoload": {
"psr-4": {
"DG\\Munchkin\\": "src/DG/Munch/"
}
}
cela ne chargera pas les classes de /var/www/html/xxx/vendor/yyy/src/DG/Munch
, comme vous l'avez dit.
Parce que la structure de votre projet est:
/var/www/html/
+- /xxx (project)
- composer.json
+- /src
+- DG
+- Munch
+- /vendor
- autoload.php
+- vendor-projectA
+- vendor-projectB
+- yyy
Le \DG\Munchkin
l'espace de noms serait mappé aux classes à l'intérieur
/var/www/html/xxx/src/DG/Munch
et pas à l'intérieur
/var/www/html/xxx/vendor/yyy/src/DG/Munch
.
Mais comment puis-je charger des classes depuis/var/www/html/xxx /?
Définissez les chemins dans le fichier composer.json (à l'intérieur/var/www/html/xxx /) de votre projet:
"autoload": {
"psr-4": {
"ProjectRoot\\" : "",
"NamspaceInSourceDir\\" : "src/"
}
}
ou chargez l'autoloader composer dans votre index.php ou pendant c'est bootstrap et ajoutez les chemins manuellement:
$loader = require 'vendor/autoload.php';
$loader->add('Namespace\\Somewhere\\Else\\', __DIR__);
$loader->add('Namespace\\Somewhere\\Else2\\', '/var/www/html/xxx');
Référencement: https://getcomposer.org/doc/04-schema.md#autoload