2015-06-23 4 views
7

Hallo Ich versuche, ein Paket in Laravel 5.1 zu entwickeln. Dank Hilfe hier habe ich die Grundlagen eingerichtet.Laravel 5.1 Package Development - Pakete Abhängigkeiten in der Entwicklung laden

Mein aktuelles Problem ist, wie Abhängigkeiten für das Paket zu laden, während ich es entwickle.

In den Paketen composer.json habe ich Abhängigkeiten hinzugefügt und diese jetzt in einem Herstellerordner in meinem Paketentwicklungsordner installiert. Dies ist nicht der Frameworks-Händlerordner.

Hier ist mein Teil der Pakete benötigen composer.json:

"require": { 
"illuminate/support": "~5.1", 
"php" : ">=5.3.0", 
"google/apiclient": "dev-master" 
}, 

Weil sie nicht Teil des Haupt automatisch geladen Prozesses ist das, was der beste Ansatz für mein Paket, um sicherzustellen, die Abhängigkeiten ist richtig aus den Entwicklungsordnern geladen ? Wie schließe ich das Autoload an? Ich bin besorgt, dass, wenn ich sie auf ihren aktuellen Standort/Namespace verweisen, dass es brechen wird, wenn später als ein Paket in einer anderen App installiert wird.

in meinem Code habe ich folgende:

$client = new \Google_Client($config); 

, die den Fehler verursacht:

Class 'Google_Client' not found 

Ich kann diese Runde erhalten, indem diese Abhängigkeit zu dem Haupt composer.json Zugabe aber nicht denke, das ist der richtige Ansatz, um die Paketentwicklung unabhängig zu halten (wenn das Sinn macht)

Als ich in L4.2 entwickelte gab es die Workbench, die sich um das Laden kümmerte, welches von c ourse keine Funktionen mehr in L5.1

Jede Hilfe und bewährte Verfahren geschätzt

Antwort

2

Because they are not part of the main autoload process

Ich glaube, Sie falsch verstanden, wie Komponisten Abhängigkeiten verwaltet werden. Wenn Sie in Ihrer main compose.json-Datei eine Abhängigkeit auflisten, fügt der Composer sie dem Haupt-Autoload-Prozess sowie all ihren Abhängigkeiten und den Abhängigkeiten ihrer Abhängigkeiten usw. rekursiv hinzu.

Sie müssen sich keine Gedanken darüber machen, wo die Abhängigkeiten gespeichert sind oder wie sie von Composer geladen werden. Der Composer fügt sie automatisch zur Autoload-Datei hinzu und Sie müssen lediglich , um sicherzustellen, dass Sie die Composer-Autoload-Datei benötigen. Sobald Sie die Composer-Autoload-Datei benötigen, stehen alle von Composer geladenen Klassen und Funktionen zur Verfügung. Sofern Sie die Autoload-Datei des Composers benötigen, müssen Sie nur die Klassen aller installierten Pakete verwenden, um sicherzustellen, dass Sie sie mit dem richtigen Namespace adressieren. Composer ist schlau genug, um zu wissen, wo alle Klassen gespeichert sind und wie man sie lädt (das ist, was psr-0, psr-4, ... sind).

Also, wenn Sie ein Composer-Paket entwickeln, nennen wir es 'A', und Sie listen das Paket 'C' als eine der Abhängigkeiten Ihres Pakets 'A' auf, Composer fügt es der Autoload-Datei für Sie hinzu . Wenn Sie ein anderes Paket verwenden, sagen wir, Laravel, das eine Abhängigkeit von Ihrem Paket 'A' hat, dann wird auch das Paket 'C' in Laravel verfügbar sein, da es eine Abhängigkeit von 'A' ist.

Ie: Wenn dies Ihr Komponist ist.JSON-Datei

{ 
    "name": "foo/bar", 
    "require": { 
     "google/apiclient": "1.0.*" 
    } 
} 

Dieser Code

require_once __DIR__ . '/vendor/autoload.php'; 
$client = new Google_Client(); 
$youtube = new Google_Service_YouTube($client); 

Hinweis funktioniert Ich habe den Komponisten automatisch geladen Datei benötigt, die Ihr Problem zu sein scheint. Wenn Sie Laravel verwenden, wird diese Datei für Sie hinzugefügt.

+0

Das hat es getan und macht jetzt Sinn - danke – Ray

+0

Scheint, wie erfordert die Composer Autoload-Datei des Pakets kann von der Boot-Methode des Dienstanbieters erfolgen. – dannepanne