2015-06-23 13 views
7

Ciao Sto cercando di sviluppare un pacchetto in Laravel 5.1. Grazie all'aiuto qui ho impostato le basi.Sviluppo di pacchetti Laravel 5.1 - caricamento delle dipendenze dei pacchetti nello sviluppo

Il mio problema attuale è come caricare le dipendenze per il pacchetto mentre lo sviluppo.

Nei pacchetti composer.json ho aggiunto delle dipendenze e le ho installate ora in una cartella del venditore all'interno della cartella di sviluppo dei miei pacchetti. Questa non è la cartella del fornitore root del framework.

Ecco la mia richiedono sezione dei pacchetti composer.json:

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

Perché non sono parte del processo di caricamento automatico principale qual è l'approccio migliore per garantire le dipendenze per il mio pacchetto vengono caricati correttamente all'interno della cartella di sviluppo ? Come posso includere il caricamento automatico? Sono preoccupato che se faccio riferimento alla loro posizione corrente/spazio dei nomi che si romperà quando in seguito installato come un pacchetto in un'altra app.

nel mio codice ho il seguente:

$client = new \Google_Client($config); 

che dà l'errore:

Class 'Google_Client' not found 

posso ovviare a questo con l'aggiunta di questa dipendenza al composer.json principale, ma non lo fanno penso che sia l'approccio corretto per mantenere indipendente lo sviluppo del pacchetto (se questo ha senso)

Quando ho sviluppato in L4.2 c'era il banco di lavoro che si occupava del caricamento che di c ourse non è più funzionalità in L5.1

Qualsiasi aiuto e le migliori prassi apprezzata

risposta

2

Because they are not part of the main autoload process

penso che si frainteso come dipendenze compositore vengono gestiti. Quando nel file principale di compose.json viene elencata una dipendenza, il compositore la aggiungerà al processo di caricamento automatico principale e tutte le relative dipendenze e le dipendenze delle loro dipendenze, e così via in modo ricorsivo.

Non devi preoccuparti di dove sono archiviate le dipendenze o di come Composer le caricherà. Il compositore li aggiungerà automaticamente al file di caricamento automatico e è sufficiente assicurarsi di aver richiesto il file autoload compositore. Una volta richiesto il file autoload del compositore, saranno disponibili tutte le classi e le funzioni caricate dal compositore. A patto che sia necessario il file autoload del compositore, tutto ciò che si deve fare per usare le classi da uno qualsiasi dei pacchetti installati è assicurarsi di indirizzarli usando lo spazio dei nomi appropriato. Il compositore è abbastanza intelligente da sapere dove sono archiviate tutte le classi e come caricarle (questo è ciò che psr-0, psr-4, ... sono per).

Quindi, se si sta sviluppando un pacchetto Composer, chiamiamolo 'A' e si elenca il pacchetto 'C' come una delle dipendenze del pacchetto 'A', il compositore lo aggiungerà al file di caricamento automatico per te . Se usi un altro pacchetto, diciamo, Laravel, che ha una dipendenza dal tuo pacchetto "A", allora anche il pacchetto "C" sarà disponibile in Laravel, poiché è una dipendenza di "A".

I.e: Se questo è il tuo compositore.JSON file di

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

Questo codice funzionerà

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

Nota ho richiesto il file autoload compositore, che sembra essere il problema. Quando si utilizza Laravel, questo file verrà aggiunto automaticamente.

+0

Questo ha funzionato e ha senso ora - grazie – Ray

+0

Sembra che richiedere il file autoload del compositore del pacchetto possa essere eseguito dal metodo di avvio del provider di servizi. – dannepanne

Problemi correlati