2012-11-19 4 views
7

Also - ich habe einen einfachen PCR0 Auto-Loader in meinem bootstrap.php, die von Anbietern Verzeichnis jeder PCR0 kompatible Bibliothek Klasse laden sollte ...Überspringen Autoload-Dateien Generation in Composer?

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); 
    } 
}); 

Ich bin nicht sicher, ob ich verstehe, warum Composer generiert automatisch Laden von Dateien in Anbieter Verzeichnis (nämlich Composer Verzeichnis und autoload.php Datei)?

Kann ich Composer davon abhalten, diese Auto-Loader-Dateien zu erzeugen? oder verpasse ich etwas? Ich glaube nicht, dass ich sie brauche?

Antwort

4

Es gibt drei Autoload-Dateien, die jeweils unterschiedlichen Zwecken dienen.

  • vendor/autoload.php initialisiert die Autoloader des Komponisten. Composer bietet einen Autoloader, um Composer-kompatible Bibliotheken zu laden.
  • vendor/composer/autoload_classmap.php Diese Datei wird vom Classmap-Autoloader verwendet, dies ist entweder für Bibliotheken, die nicht einmal PSR-0-kompatibel sind, oder für Produktionsumgebungen (classmap ist schneller als ein Nachschlagen durch das Dateisystem).
  • Verkäufer/Komponist/autoload_namespaces.php dies ist die Konfiguration für das PSR-0 autoloading, der Komponist mit

Jetzt kommt erwähnten Sie, dass Sie Ihre eigene PSR-0 Classloader haben, die Sie nicht verwenden sollen für Composer-Abhängigkeiten - Sie sollen einfach den/vendor/autoload.php benötigen/einbinden und Composer den Rest erledigen lassen.

Aus diesem Grund gibt es keine Möglichkeit, die Erstellung der Autoloading-Dateien zu deaktivieren. Am Ende soll Composer Ihnen ermöglichen, die installierte Bibliothek zu verwenden, und Sie mit allen erforderlichen Ladefunktionen versorgen.

+0

"funktioniert gut ..require/include den Verkäufer/autoload.php und Komponist haben .. "Hmmm. IMHO Dependency Management und Autoloading sind verschiedene Probleme. Manche Leute ziehen es vor, zB Zend \ Loader oder andere Bibliotheken zum Autoloading zu verwenden. Normalerweise bevorzuge ich nur die Verwendung von PSR0-konformen Bibliotheken und dieses kurze Snippet im Bootstrap - und mache mir keine Gedanken über unterschiedliche Ladestrategien. Zend/Loader unterstützt auch Klassenmaps ... –

+0

von composer docs: "Für Bibliotheken, die Autoload-Informationen angeben, generiert Composer eine Datei namens vendor/autoload.php." - Das hört sich für mich fast so an, als würde der Komponist Autoloading als eher optonal darstellen, aber du sagst es nicht? –

+0

für Bibliotheken, die angeben, bedeutet die Bibliotheken, die Sie über Composer installieren. Wenn die Datei composer.json dieser Bibliothek Autoload-Informationen enthält, werden diese Autoload-Informationen in autoload.php gespeichert. – ppetermann

0

Persönlich habe ich diese Dateien .gitignore da das Projekt arbeite ich auf einen Autoloader hat die