Ich habe ein Paket, das automatisch eine PHP-Datei ohne Namespaced laden muss, wenn das Paket in einer Anwendung enthalten ist.Automatisches Einschließen der Datei in ein Paket, wenn sie als Abhängigkeit in Composer enthalten ist
Unten ist meine allgemeine Verzeichnisstruktur
packages/
+-- PackageA/
+-- Entities/
+-- Mappers/
+-- Services/
+-- composer.json
+-- constants.php
apps/appA/
+-- vendors/
+-- autoload/
+-- composer.json
apps/appB/
+-- vendors/
+-- composer.json
ich die Anweisungen befolgt hat here einen Pfad Repository PackageA
eine Abhängigkeit bei der Herstellung für appA/
zu verwenden. Dieser Teil funktioniert reibungslos.
Einige Dateien innerhalb von PackageA
erfordern Zugriff auf Konstanten, meist Dateipfade. Dies ist, was „constants.php“ ist für, und diese Werte werden prozedural definiert:
<?php
define('XML_REPO_PATH', __DIR__ . '/../blah/xml/');
// --etc--
ich ursprünglich dachte, die das automatische Laden von Mechanismus ‚Dateien‘ zu verwenden, in „packages/PackageA/composer.json“ mit:
Dies erfordert jedoch nicht constants.php, wenn PackageA
als eine Abhängigkeit in appA
enthalten ist. Um dies zu beheben, anstatt "files": [...]
des Setzens in "packages/PackageA/composer.json", habe ich die folgenden in der Autoload-Abschnitt von "app/appsA/composer.json":
"files": ["vendors/packages/PackageA/constants.php"]
Dies ist nicht sehr wünschenswert, weil jede Anwendung mit PackageA
würde dies benötigen. Ich würde denken, dass die Natur des Komponisten es mir erlauben würde, sicherzustellen, dass Dateien innerhalb von PackageA
Zugriff auf bestimmten prozeduralen Code haben (d. H. Dazu gedacht sind), wie im Fall von Konfigurationskonstanten. Gibt es eine Möglichkeit, dies zu tun?
Gibt es einen Grund, warum Sie Ihrer Datei 'constants.php' keinen Namespace hinzufügen können und regelmäßig Autoloading verwenden? – Chris
@Chris, weil ich in PHP <5.6 Klassenkonstanten nicht mit anderen Konstanten wie '__DIR__' verketten kann – jeremy