2017-01-27 3 views
1

Ich bin neu bei composer und habe es benutzt, um den oauth2-client zu installieren. Ich glaube, ich habe ein Missverständnis darüber, wie das funktionieren soll.Warum installiert Composer oauth2-client mit verschiedenen Verzeichnisnamen und Dateien?

Von thephpleague Github Seite, die ich von der Kommandozeile composer require league/oauth2-client

Diese zusätzliche Dateien in/usr/local/bin/Verkäufer/Liga/oauth2-Client mit installiert. Die Dateistruktur sieht genauso aus wie auf github, außer dass ich nicht alle Dateien habe.

Und der PHP in den Dateien sucht nach Dateien in \ League \ OAuth2, so bekomme ich Fehler, dass es keine enthaltenen Dateien finden kann, weil ich dieses Verzeichnis nicht habe.

Habe ich es falsch gemacht, oder bekomme ich einfach nichts?

Antwort

0

Der Backslash ist das PHP-Namespace-Trennzeichen, nicht das Verzeichnistrennzeichen.

Im composer.json für oauth2 von The League, ist dies die autoload Richtlinie:

"autoload": { 
    "psr-4": { 
     "League\\OAuth2\\Client\\": "src/" 
    } 
}, 

Er sagt, dass der Code innerhalb von src Verzeichnis im League\OAuth2\Client Namespace ist.

Composer folgt PSR-4 in Bezug auf Namespacing und Autoloading, also überprüfen Sie das, wenn Sie wissen wollen, was passiert.

UPDATE: Wenn Sie andere Liga-Erweiterungen installiert haben, wie oauth2-facebook, wird es selbst installiert in demselben src Verzeichnis - wegen der Autoload-Richtlinie in composer.json.

Warum?
Nun, wegen des Namensraums finden Sie "Facebook" im League\OAuth2\Client\Provider Namensraum.
Aufgrund von PSR-4 bedeutet dies, dass sie in dasselbe Verzeichnis gehen müssen, obwohl sie unterschiedliche Pakete sind.

Das ist der Grund, warum Sie Facebook.php in src/Providers Verzeichnis sehen. Überprüfen Sie die oauth2-facebook

Sie haben wahrscheinlich required oauth2-facebook und oauth2-google, oder eines Ihrer anderen erforderlichen Pakete erfordert es. Es fügt sich nur selten selbst hinzu. :)

+0

OK, ich glaube, ich war ein wenig verschwommen, wie Namespaces funktionieren, ich muss mehr darüber nachdenken. Aber wie sieht es mit den Dateien anders aus? Zum Beispiel möchte ich die Datei verwenden, die ich auf github, oauth2-client/src/Provider/GenericProvider.php sehe. Aber wenn ich auf meinem Server im selben Pfad gucke, sind alle Dateien in diesem Verzeichnis unterschiedlich. – xena

+0

Was meinst du mit * 'alle Dateien sind anders' *? Welche Version verwendest du? Überprüfen Sie die '.gitattribues' des Repository - das' test' und das 'docs' Verzeichnis sind ausgeschlossen. Der ganze Rest ist im Paket enthalten. – jacmoe

+1

auf github in src/Provider gibt es 4 Dateien, AbstractProvider.php, GenericProvider.php, etc. Wenn ich mich in meinem Server in src/Provider anmelden die Dateien sind Google.php, Facebook.php, etc – xena

Verwandte Themen