2012-11-19 10 views
7

Così - Ho una semplice PCR0 auto-loader nel mio bootstrap.php, che dovrebbe caricare qualsiasi PCR0 Class Library compatibile dal fornitori directory ...Salta la generazione di file autoload nel compositore?

spl_autoload_register(function($classname) { 
    $path = preg_match('/\\\\/', $classname) 
    ? str_replace('\\', DIRECTORY_SEPARATOR, $classname) 
    : str_replace('_', DIRECTORY_SEPARATOR, $classname); 
    $file = VENDORS_PATH . DIRECTORY_SEPARATOR . $path . '.php'; 
    if (file_exists($file)) { 
     require_once($file); 
    } 
}); 

Io non sono sicuro se ho capito perché Il compositore genera file autoaggiunti nella directory (ovvero compositore directory e file autoload.php)?

Posso impedire a Composer di generare quei file di caricamento automatico? O mi sta sfuggendo qualcosa? Non penso di aver bisogno di loro?

risposta

4

Ci sono tre file relativi al caricamento automatico, ciascuno con uno scopo diverso.

  • vendor/autoload.php inizializza i caricatori automatici del compositore. Composer offre un caricatore automatico per abilitare il caricamento di librerie compatibili con Composer.
  • vendor/compositore/autoload_classmap.php questo file viene utilizzato dal caricatore automatico di classmap, questo è per le librerie che non sono nemmeno compatibili con PSR-0 o per gli ambienti di produzione (classmap è più veloce di una ricerca tramite il file system).
  • venditore/compositore/autoload_namespaces.php questa è la configurazione per il PSR-0-caricamento che viene fornito con il compositore

Ora è detto che avete il vostro PSR-0 classloader, che non si suppone di utilizzare per le dipendenze dei compositori - devi semplicemente richiedere/includere il venditore/autoload.php e fare in modo che il compositore si occupi di tutto il resto.

Ecco perché non è possibile disabilitare la generazione dei file di caricamento automatico. Alla fine, il compositore dovrebbe consentire di utilizzare la libreria installata e ti consente di fornire tutto il caricamento che ti serve.

+0

" ..require/includere il venditore/autoload.php e avere il compositore .. "Hmmm. La gestione delle dipendenze e l'autoloading della IMHO sono problemi diversi. Alcune persone preferiscono, ad esempio, utilizzare Zend \ Loader o altre librerie per l'autoloading. Di solito preferisco usare solo le librerie conformi a PSR0 e questo breve frammento nel bootstrap e non preoccuparmi mai delle diverse strategie di caricamento. Zend/Loader supporta anche le classmap ... –

+0

dai documenti del compositore: "Per le librerie che specificano le informazioni sul caricamento automatico, Composer genera un file venditore/autoload.php." - questo per me sembra quasi che Composer presenti un autoloading piuttosto optonale, eppure stai dicendo che non lo è? –

+0

per le librerie che specificano le librerie installate tramite il compositore. Se il compositore.json di quella libreria ha informazioni di autload, allora quelle informazioni di autoload verranno inserite in autoload.php. – ppetermann

0

Personalmente ho aggiunto i file al .gitignore poiché il progetto cui sto lavorando ha un caricatore automatico che funziona bene

Problemi correlati