Frage

Ich habe ein Komponistenprojekt, nennen wir es MyVendor\Database.Dieses Projekt verwendet Composer und Autoloading.Es gibt mehrere Dateien in diesem Projekt, die Folgendes enthalten:

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

um das automatische Laden zu nutzen.

Es funktioniert alles großartig, bis ich es hinzufüge MyVendor\Database in einem anderen Projekt.

Ich habe ein anderes Projekt, nennen Sie es MyVendor\CoolPackage Das benötigt MyVendor\Database.

Ich führe Composer Install aus CoolPackage und es wird heruntergeladen MyVendor\Database in den Vendor-Ordner.

Das Problem von hier aus sind jedoch meine darin enthaltenen Dateien vendor\MyVendor\Database scheitern, weil sie anrufen require_once __DIR__."/../vendor/autoload.php", aber darin befindet sich kein Vendor-Ordner \vendor\MyVendor\Database.

War es hilfreich?

Lösung

In deinem composer.json Sie definieren das automatische Ladeschema.Aus Gründen, die Sie jetzt selbst herausgefunden haben, ist es keine gute Idee, das automatische Laden von Composer innerhalb einer der Dateien aufzurufen, die nicht nur innerhalb dieser Anwendung oder dieses Moduls, sondern auch in jeder anderen Anwendung automatisch geladen werden sollen.

Grundsätzlich sollten die Dateien in jedem Composer-Projekt basierend auf der Definition von PSR-0 oder 4 Autoloading aufgeteilt werden:Sie führen entweder NUR die Deklaration von Klassen oder Funktionen OHNE Nebenwirkungen (wie die Ausführung von Code) durch, oder sie führen Code aus, ohne Klassen oder Funktionen zu definieren.Nur die früheren Dateien können automatisch geladen werden (mit Ausnahme von Funktionen, die immer nur durch Laden der Datei, die sie enthält, mit a deklariert werden könnten files Autoload-Abschnitt), letzterer sollte NICHT automatisch geladen werden.

Und dann sollte es relativ einfach werden:Alle Klassen, die automatisch geladen werden können, können auch verwendet werden, wenn diese Komponente in eine andere Anwendung eingebunden wird.Alles andere, was keine Klasse ist, kann nicht direkt verwendet werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top