2015-01-06 10 views
6

ich die folgende Verzeichnisstruktur verwenden, basierend auf meinem Verständnis davon, wie Namespaces in PHP Arbeit:Wie funktioniert PSR-4 Autoloading in Composer für benutzerdefinierte Bibliotheken?

project_root 
    app/ 
    | lib/ 
    | | MyCompany/ 
    | | | Utility/ 
    | | | | Logger.php 
    | | | Core/ 
    | | | | User.php 
vendor/ 
    composer/ 
    symfony/ 
    guzzle/ 
bootstrap.php 
composer.json 

zur PSR-4-Spezifikation Nach ein vollständig qualifizierte Klassennamen haben die folgende Form:

\<NamespaceName>(\<SubNamespaceNames>)*\<ClassName> 

Frage 1:

Aus meiner Verzeichnisstruktur oben, ist die Annahme unten korrekt?

  • Namespacename = MyCompany
  • SubNamespaceNames = Dienstprogramm | Kern
  • ClassName = Logger | Benutzer

Frage 2:

Wenn meine bootstrap.php Datei enthält folgende Komponenten:

<?php 
require 'vendor/autoload.php'; 

Wie würde ich configure the 'autoload' Abschnitt composer.json automatisch zu laden die Klassen im MyCompany Verzeichnis ? So dass ich

Antwort

5

aus der Dokumentation Genommen Sie verknüpft eine Instanz von Logger in bootstrap.php zu schaffen wäre in der Lage:

{ 
    "autoload": { 
     "psr-4": { 
      "MyCompany\\": "app/lib/MyCompany/", 
     } 
    } 
} 

die Wurzel ziemlich selbsterklärend, sagt er einfach den Autoloader, die app/lib/MyCompany Dieser ist für den Namespace MyCompany\. Sie können dann die Klasse als \MyCompany\Utility\Logger verwenden.

Beachten Sie, dass Sie in PSR-4, im Gegensatz zu PSR-0, normalerweise MyCompany aus der Verzeichnisstruktur weglassen und einfach app/lib/ verwenden.

Verwandte Themen