Come definire il percorso per autoload.php con compositore
-
21-12-2019 - |
Domanda
Ho un progetto compositore, chiamalo MyVendor\Database
.Quel progetto utilizza compositore e autoloading.Ci sono diversi file in quel progetto che hanno:
require_once __DIR__."/../vendor/autoload.php";
.
per utilizzare il ritmo automatico.
Tutto funziona alla grande, finché non includo MyVendor\Database
in un altro progetto.
Ho un altro progetto, chiamalo MyVendor\CoolPackage
che richiede MyVendor\Database
.
Esegui il compositore Installa su CoolPackage
e scarica MyVendor\Database
nella cartella del fornitore.
Il problema da qui però, i miei file sono i miei file all'interno vendor\MyVendor\Database
fallire perché chiamano require_once __DIR__."/../vendor/autoload.php"
, ma non c'è una cartella fornitore all'interno di \vendor\MyVendor\Database
.
Soluzione
Nel tuo composer.json
definisci lo schema di autooading. Per motivi per cui sei stato scoperto ora, non è una buona idea chiamare l'autoloading del compositore all'interno di uno qualsiasi dei file che dovrebbero essere automaticamente automaticamente non solo all'interno di questa applicazione o modulo, ma anche in qualsiasi altra applicazione.
Fondamentalmente, i file in qualsiasi progetto composito devono essere suddivisi in base alla definizione di PSR-0 o 4 Autoloading: Dichiarano solo le classi o le funzioni senza effetti collaterali (come il codice di esecuzione) o eseguono il codice senza il codice senza Definizione di classi o funzioni. Solo gli ex file possono essere automaticamente effettuati (ad eccezione delle funzioni, che sarebbero in grado di dichiarare sempre il caricamento del file contenente con una sezione Autoload files
), quest'ultima non deve essere automaticamente effettuata.
E poi dovrebbe diventare relativamente facile: tutte le classi che possono essere automaticamente scariche possono essere utilizzate anche quando questo componente è incluso in un'altra applicazione. Qualcos'altro che non è una classe non può essere usata direttamente.