Composeur avec autoloading PSR-4: les classes de l'espace de noms ne sont pas chargées
J'ai du suivre la structure du projet:
- root
|- src <- Application specifc source
|- [...]
|- tests
|- [...]
|- Vendor
|- myusername <- shared packages for all projects
|- src
|- MyNamespace
|- File.php
|- autoload.php
|- test.php
|- composer.json
composer.json
ont déjà un PSR-4 entrée:
"autoload": {
"psr-4": {
"MyNamespace\\":"myusername/src"
}
}
/Vendor/test.php
<?php
require 'autoload.php';
$file = new MyNamespace\File();
echo $file->isDone();
Vendor/myusername/src/MyNamespace/File.php
<?php
namespace MyNamespace;
class File
{
public function isDone()
{
return 'Done!';
}
}
Mais j'ai toujours l'erreur fatale Fatal error: Class 'MyNamespace\File' not found in [...]
Sont le compositeur de paramètres ou de structure de fichier correct? Ce que je peux faire?
EDIT 1:
Je peux charger des fournisseurs externes fine
source d'informationauteur Gabriel Santos
Vous devez vous connecter pour publier un commentaire.
Il y a 2 choses qui cloche avec votre code.
Vous utilisez le PSR-4 mal.
Ils ont supprimé la nécessité d'intégrer l'espace de noms dans vos dossiers, de faire un nettoyeur de l'empreinte dans le dossier de votre projet.
Donc, dans votre cas, il serait:
Votre compositeur.json est pas valide
Ne pas inclure le chemin complet vers le répertoire de votre projet de code. Il devrait ressembler à ceci:
mais la meilleure façon de stocker vos fichiers serait à l'extérieur de la
vendor
répertoirequi est utilisé par téléchargés automatiquement les bibliothèques, au lieu de choisir un "développement" de l'annuaire:Merci à Sven dans les commentaires.