The Essentials of Creating Laravel Bundles

Il framework Laravel PHP offre il suo sistema di bundle per consentire agli sviluppatori di ridistribuire pacchetti utili di codice o per organizzare le applicazioni in diversi "pacchetti" di applicazioni più piccole.

In questo tutorial, apprenderemo i dettagli della creazione e distribuzione di pacchetti da zero.

Un bundle Laravel ha accesso a tutte le funzionalità offerte dal framework alla sua applicazione host, inclusi routing, migrazioni, test, visualizzazioni e numerose altre utili funzioni.

Ecco un piccolo segreto, tra noi: il applicazione la cartella del pacchetto sorgente di Laravel è anche un pacchetto, che Laravel definisce come il DEFAULT_BUNDLE.


Quando creare un pacchetto?

Prima di scrivere un nuovo pezzo di codice, mi piace pormi alcune semplici domande per determinare se è appropriato per un pacchetto. Lascia che condivida questa tecnica con te.

Questo codice potrebbe essere utile agli altri?

Se la risposta a questa domanda è sì, assicurerei innanzitutto che qualcuno non abbia già creato un pacchetto o un pacchetto simile. Oltre a scopo didattico, è inutile ricreare la ruota. Se l'altro pacchetto ha uno standard abbastanza alto da essere usato nel tuo progetto, allora usa quello e risparmia il tempo.

In secondo luogo, penso al codice e decido se potrebbe essere utile o meno agli utenti di altri framework, o alle persone che non usano affatto un framework. Se il codice non è correlato al framework di Laravel e non ha bisogno di utilizzare le classi principali di Laravel, allora creerò invece un pacchetto Composer. I pacchetti di compositori stanno diventando ampiamente lo standard per la condivisione di codice che non è limitato a un singolo framework o progetto.

Per ulteriori informazioni su Composer, fare riferimento ai seguenti link:

  • Documentazione ufficiale
  • Facile gestione dei pacchetti con Composer

Se il codice potrebbe essere utile ad altri e dipende dal framework di Laravel, allora hai una buona ragione per creare un nuovo pacchetto.

Dovrò scrivere di nuovo questo codice?

DRY è il nome del gioco.

Se il codice fornisce funzionalità che scrivi frequentemente, allora ha senso creare un pacchetto. ASCIUTTO (non ripeterti!) È il nome del gioco.

Potrebbe questo codice essere considerato un'applicazione autonoma?

Ad esempio, potresti creare un sito semplice che, tra le altre caratteristiche, ha un componente del blog. Il blog potrebbe essere considerato un'applicazione separata da contenere in un pacchetto per un'organizzazione molto più ampia del tuo progetto.

Un altro esempio potrebbe essere una sezione amministrativa o "back-end" per il tuo sito web. Questa sezione potrebbe facilmente essere considerata un componente separato dall'applicazione principale e potrebbe invece essere organizzata in uno o più pacchetti.

Questo codice si adatterebbe in una singola classe?

Se questo è il caso, potresti prendere in considerazione la scrittura di una "Biblioteca". Una libreria è una singola classe che contiene codice riutilizzabile. Può essere aggiunto a un progetto Laravel facilmente facendo cadere la classe in application / librerie / directory, che viene caricata automaticamente per impostazione predefinita.


Creazione di un pacchetto

Creiamo un semplice plug-in che interagisca con il servizio Gravatar per offrire un metodo semplice per generare avatar di varie dimensioni all'interno della nostra applicazione principale. Aggiungiamo anche le funzionalità necessarie per inserire un indirizzo email e le dimensioni dell'avatar e un'anteprima del gravatar associato nella pagina.

Iniziamo creando una nuova directory all'interno di /gruppi directory del nostro progetto. Chiameremo la directory e il nostro pacchetto gravvy. Non sugo ... sugo.

Aggiungiamo la gravità alla matrice di bundle all'interno application / bundles.php in modo che possiamo testarlo mentre procediamo. Aggiungeremo un 'auto' => true opzione per l'array in modo che il bundle venga avviato automaticamente e tutti i mapping del caricatore automatico che creiamo saranno disponibili per l'intero Laravel.

return array ('docs' => array ('handles' => 'docs'), 'gravvy' => array ('auto' => true));

Innanzitutto, dovremo creare una piccola libreria che recuperi l'avatar di un utente, utilizzando un indirizzo email. Crea un nuovo file nella radice del pacchetto, denominato gravvy.php. Creiamo una classe, chiamata Gravvy con un metodo statico, rendere(), per replicare lo schema di denominazione utilizzato dalle librerie di Laravel.

Il rendere() il metodo accetta due parametri: un indirizzo email e un numero intero per rappresentare la dimensione dell'avatar da recuperare.

 * / class Gravvy / ** * Crea un nuovo elemento immagine da un indirizzo email. * @param string $ email L'indirizzo email. * @param integer $ size La dimensione dell'avatar. * @return string La fonte per un elemento immagine. * / public static function make ($ email, $ size = 32) // converti la nostra email in un hash md5 $ email = md5 ($ email); // restituisce l'elemento immagine return '');  / ** * Verifica che l'output di un avatar appaia come previsto quando * specifica una dimensione avatar personalizzata. * * @return void * / public function testAvatarImageIsGeneratedWithSize () // avvia il pacchetto gravvy Bundle :: start ('gravvy'); // controlla che l'output corrisponda al previsto $ this-> assertEquals (Gravvy :: make ('[email protected] ', 64),''); 

Sopra, abbiamo scritto due test PHPUnit: uno per testare l'output di generare un avatar usando una e-mail, e un altro che specifica anche una dimensione avatar in pixel. Noterai che chiamiamo Bundle :: Start ( 'gravvy') per avviare manualmente il pacchetto. Questo perché Laravel non carica automaticamente i pacchetti attraverso l'interfaccia della riga di comando al momento.

Come membro del team principale, vorrei sottolineare che intendiamo risolvere questo problema in una versione futura!

Usiamo Artisan per eseguire i nostri test PHPUnit digitando il test comando e usando il nome del pacchetto, gravvy, come parametro.

php artisan test gravvy

Grande! I nostri test sono stati eseguiti con successo al primo tentativo e il nostro ego è cresciuto - solo un po '!

Ora che la nostra classe Gravvy è stata testata, le persone possono usarla nelle proprie applicazioni! Prendiamo il pacchetto un ulteriore passo avanti e creiamo un paio di semplici pagine per generare e visualizzare in anteprima i gravatars. Possiamo usare questo esempio per imparare come il sistema di routing gestisce i bundle.

Per iniziare, creiamo un nuovo controller di 'anteprima' per il nostro pacchetto. Dovremo creare un controllori directory all'interno del pacchetto e, al suo interno, aggiungeremo un nuovo file: preview.php.

 

Il nome del controller deve essere preceduto dal nome del bundle e aggiunto in _controller - come con i normali controller.

Potremmo creare alcune rotte per mappare le nostre azioni del controller su URI sensibili, ma non sarebbe meglio se potessimo consentire all'utente di decidere quale bundle utilizzare l'URI di base? Sarebbe? Facciamolo allora!

Aggiungendo a 'maniglie' => 'gravvy' coppia chiave-valore per l'array di configurazione dei bundle, possiamo consentire all'utente di cambiarlo senza alterare il codice del bundle stesso. Ecco la configurazione risultante in application / bundles.php.

return array ('docs' => array ('handles' => 'docs'), 'gravvy' => array ('auto' => true, 'handles' => 'gravvy'));

Ora possiamo usare il (: Fascio) segnaposto nei nostri percorsi, che verrà sostituito con il valore del maniglie opzione. Creiamo a routes.php file nella radice dei nostri bundle e aggiungere alcuni percorsi.

Route :: get ('(: bundle) / form', 'gravvy :: preview @ form'); Route :: post ('(: bundle) / preview', 'gravvy :: preview @ preview');

Abbiamo la strada OTTIENI LA ​​FORMA / FORMA che è mappato al modulo azione del Anteprima controller e POST gravvy / preview che è mappato al anteprima azione del Anteprima controllore.

Creiamo le viste associate per le nostre azioni del controllore; puoi renderli complessi e belli come vuoi, ma li manterrò semplici. Innanzitutto, crea un visualizzazioni cartella all'interno del pacchetto, proprio come con la directory dell'applicazione.

 

Ora che abbiamo un modulo che invierà un campo email e dimensioni al Anteprima @ anteprima controller / action pair, creiamo una pagina di anteprima per l'avatar generato; useremo un attributo, chiamato $ elemento, per mantenere la sua fonte.

 

$ element

HTML :: link \ _to \ _action ('gravvy :: preview @ form', '< Go Back!')

Ora dobbiamo modificare il anteprima azione per utilizzare i dati inviati dal modulo.

/ ** * Mostra l'avatar risultante. * / public function action_preview () // recupera i dati dal nostro modulo $ email = Input :: get ('email'); $ size = Input :: get ('size'); // genera l'avatar $ avatar = Gravvy :: make ($ email, $ size); // carica la vista di anteprima return: :: make ('gravvy :: preview') -> with ('elemento', $ avatar); 

Recuperiamo i dati POST e li usiamo per creare il nostro avatar. Dobbiamo anche aggiungere un con() metodo per il Vista :: fare () catena per consentire l'utilizzo dell'elemento all'interno della vista.

Possiamo finalmente testare il nostro sistema di anteprima di avatar! Dai un'occhiata al / Gravvy / modulo URI e provalo! Tutto funziona come previsto.

Questo potrebbe non essere il modo migliore per organizzare il tuo pacchetto, ma mette in evidenza alcune delle cose utili che sono possibili. Divertiti a creare i tuoi bundle e assicurati di pubblicarli sul sito Web dei bundle.


Pubblicare un pacchetto

Una volta che il tuo bundle si trova in uno stato funzionale, puoi prendere in considerazione la possibilità di inserirlo nell'elenco Laravel Bundles Directory. Esaminiamo il processo di invio di un nuovo pacchetto.

Innanzitutto, è necessario disporre di un account GitHub e avere il pacchetto in versione in un repository pubblico. GitHub offre account gratuiti con un numero illimitato di repository pubblici; troverai il loro modulo di iscrizione qui.

Se sei nuovo del controllo della versione con Git, ti suggerisco di leggere la grande serie di articoli Git qui su Nettuts+.

Una volta che hai il tuo account e il codice in ordine, assicurati che l'ultima versione del tuo bundle si trovi nel ramo "master" e che la radice del tuo bundle (dove start.php sarebbe) è la radice del repository, piuttosto che una sottodirectory.

Successivamente, visita il sito Web di Laravel Bundles Directory e accedi utilizzando le credenziali di GitHub.

Ora fai clic sul pulsante "Invia un pacchetto", seleziona il repository del bundle dal menu a discesa e premi il pulsante "Continua".

Il modulo di iscrizione è abbastanza semplice, ma qui ci sono alcuni "trucchi" che potresti non notare.

Nome

Il nome è una parola chiave in minuscolo utilizzata per installare l'applicazione. Deve essere una parola breve ma accurata per descrivere il tuo pacchetto.

Riepilogo / Descrizione

Questi campi possono contenere contenuti in formato markdown. Quindi sentiti libero di copiare il contenuto dal tuo GitHub README.md file.

Dipendenze / tag

Utilizza il pulsante virgola sulla tastiera per separare tag e dipendenze. Il campo delle dipendenze deve contenere la parola chiave di installazione breve per il pacchetto che esiste come dipendenza per il pacchetto che si sta inviando.

Attivo

Il Attivo campo determina semplicemente se il pacchetto verrà visualizzato o meno ad altri utenti. Sei ancora in grado di installare pacchetti inattivi tramite la loro parola chiave di installazione a scopo di test. Imposta questo campo su "Sì" solo quando sei felice che altre persone usino il tuo pacchetto.

Dopo aver fatto clic sul pulsante "Salva", il pacchetto è stato inviato e, se contrassegnato come "Attivo", verrà visualizzato negli elenchi del gruppo. È sempre possibile modificare l'elenco dei pacchetti in un secondo momento.


Trovare pacchetti

I bundle che sono stati condivisi con la comunità di Laravel sono elencati nella directory Bundles su http://bundles.laravel.com.

Puoi sfogliare i pacchetti per categoria o utilizzare la funzione di ricerca per trovare il pacchetto che stai cercando. Una volta trovato un pacchetto che soddisfa i tuoi requisiti, dai un'occhiata alla scheda 'Installazione' del profilo del pacchetto per trovare la parola chiave di installazione.


Installare un pacchetto

Una volta che hai installato la parola chiave install per un pacchetto, puoi installarlo dalla base del tuo progetto usando l'interfaccia a linea di comando 'Artisan', ed è fascio: installare comando. Per esempio…

bundle php artisan: installa bob

Artisan consulterà l'API dei bundle per recuperare il percorso del repository GitHub dei bundle e i repository di tutte le sue dipendenze. Quindi scaricherà i pacchetti sorgente direttamente da GitHub e li estrarrà nel /gruppi directory per te.

Sarà necessario aggiungere manualmente il nome del bundle alla matrice all'interno application / bundles.php per abilitare il pacchetto.

return array ('docs' => array ('handles' => 'docs'), 'bob');

In alcune situazioni, potrebbe essere necessario aggiungere ulteriori informazioni a questo schieramento voce per facilitare l'avvio automatico o indirizzare determinati percorsi al pacchetto. L'autore avrà fornito queste informazioni aggiuntive nella descrizione dei pacchetti, se questo è il caso.


Grazie per aver letto e divertito a creare i tuoi bundle con Laravel! Se vuoi saperne di più su Laravel, assicurati di prendere il mio libro!