Question

J'ai un compositeur de projet, de l'appeler MyVendor\Database.Ce projet utilise le compositeur et le chargement automatique.Il y a plusieurs fichiers dans ce projet:

require_once __DIR__."/../vendor/autoload.php";

afin d'utiliser l'auto-chargement.

Tout fonctionne très bien, jusqu'à ce que je comprend MyVendor\Database dans un autre projet.

J'ai un autre projet, de l'appeler MyVendor\CoolPackage qui nécessite MyVendor\Database.

- Je exécuter compositeur installer sur CoolPackage et elle se télécharge MyVendor\Database dans le fournisseur de dossier.

Le problème, ici, est à Mes fichiers à l'intérieur vendor\MyVendor\Database l'échec parce qu'ils appel require_once __DIR__."/../vendor/autoload.php", mais il n'y a pas de vendeur dossier à l'intérieur de \vendor\MyVendor\Database.

Était-ce utile?

La solution

Dans votre composer.json vous définissez le chargement automatique de régime.Pour des raisons que vous trouvez vous-même maintenant, il n'est pas une bonne idée d'appeler le Compositeur d'auto-chargement à l'intérieur de tous les fichiers qui sont censés être autoloadable non seulement à l'intérieur de l'application ou d'un module, mais dans toute autre application.

Fondamentalement, les fichiers de n'importe quel Compositeur de projet doit être divisée en fonction de la définition du PSR-0 ou 4 auto-chargement:Soit ils SEULEMENT faire la déclaration de classes ou de fonctions, SANS effets secondaires (comme l'exécution de code), ou d'exécuter du code sans la définition des classes ou des fonctions.Seuls les anciens fichiers peuvent être chargés automatiquement (à l'exception des fonctions, qui ne serait en mesure de toujours être déclarée par le chargement d'un fichier contenant avec un files chargement automatique de la section), le second ne devrait PAS être chargé.

Et puis, il devrait être relativement facile:Toutes les classes qui peuvent être chargées automatiquement peut également être utilisé lorsque ce composant est inclus dans une autre application.Autre chose qui n'est pas une classe ne peut pas être utilisé directement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top