Det väsentliga med att skapa Laravel-paket

Laravel PHP-ramverket erbjuder sitt buntningssystem för att tillåta utvecklare att omfördela användbara kodpaket, eller att organisera applikationer i flera "buntar" av mindre applikationer.

I den här handledningen lär vi oss insatserna för att skapa och distribuera buntar från början.

Ett Laravel-paket har tillgång till alla funktioner som ramverket erbjuder till sin värdapplikation, inklusive routing, migreringar, test, visningar och många andra användbara funktioner.

Här är en liten hemlighet, mellan oss: Ansökan mapp på Laravel källkodspaketet är också en bunt som Laravel kallar som DEFAULT_BUNDLE.


När ska du skapa en bunt?

Innan jag skriver en ny kod, tycker jag om att fråga mig några enkla frågor för att bestämma om det är lämpligt för ett paket. Låt mig dela den här tekniken med dig.

Kunde den här koden vara användbar för andra?

Om svaret på denna fråga är ja, så förstår jag först att någon inte redan har skapat en liknande bunt eller ett paket. Annat än för lärande är det meningslöst att återskapa hjulet. Om det andra paketet är tillräckligt högt för att användas i ditt projekt, använd det istället och spara tid.

För det andra tänker jag på koden och bestämmer huruvida det kan vara användbart för användare av andra ramar eller personer som inte använder någon ram alls. Om koden inte är relaterad till Laravel-ramverket och inte behöver använda Laravels kärnklasser, skulle jag istället skapa ett kompositörspaket. Kompositörspaket blir vanligtvis standard för delning av kod som inte är begränsad till en enda ram eller ett projekt.

Mer information om kompositör finns i följande länkar:

  • Officiell dokumentation
  • Enkel pakethantering med kompositör

Om koden kan vara användbar för andra och är beroende av Laravel-ramverket, har du en bra anledning att skapa en ny bunt.

Ska jag behöva skriva den här koden igen?

DRY är namnet på spelet.

Om koden ger funktionalitet som du skriver ofta, är det vettigt att skapa en bunt. Torka (Repetera inte dig själv!) Är namnet på spelet.

Kan denna kod betraktas som en fristående ansökan?

Till exempel kan du bygga en enkel webbplats som bland annat innehåller en bloggkomponent. Bloggen kan betraktas som en separat applikation som ingår i ett paket för mycket större organisation av ditt projekt.

Ett annat exempel skulle vara en administrativ del, eller "back-end" för din webbplats. Det här avsnittet kan enkelt betraktas som en separat komponent från huvudapplikationen, och kan istället organiseras i en eller flera buntar.

Skulle denna kod passa in i en enda klass?

Om så är fallet kan du överväga att skriva ett "Bibliotek" istället. Ett bibliotek är en enda klass som innehåller återanvändbar kod. Det kan enkelt läggas till ett Laravel-projekt genom att släppa klassen i application / bibliotek / katalog som automatiskt laddas automatiskt.


Skapa ett paket

Låt oss skapa en enkel plug-in som samverkar med Gravatar-tjänsten för att erbjuda en enkel metod för att generera avatarer av olika storlekar inom vår huvudsakliga applikation. Vi lägger också till nödvändig funktionalitet för att ange en e-postadress och avatarstorlek och förhandsgranska den associerade gravataren på sidan.

Låt oss börja med att skapa en ny katalog inom /buntar katalog över vårt projekt. Vi ringer upp katalogen och vårt paket gravvy. Inte sås ... gravvy.

Låt oss lägga till gravvy till buntaruppsättningen inom application / bundles.php så att vi kan testa det när vi går vidare. Vi lägger till en 'auto' => true alternativet till arrayen så att paketet startas automatiskt, och alla autoloader mappings vi skapar kommer att vara tillgängliga för hela Laravel.

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

Först måste vi skapa ett litet bibliotek som kommer att hämta en användares avatar med en e-postadress. Skapa en ny fil inom ramen för buntnamnet, namngivet gravvy.php. Låt oss skapa en klass som heter Gravvy med en statisk metod, göra(), att replikera namngivningssystemet som används av Laravels egna bibliotek.

De göra() Metoden kommer att acceptera två parametrar: en e-postadress och ett heltal för att representera storleken på avataren för att hämta.

 * / klass Gravvy / ** * Skapa ett nytt bildelement från en e-postadress. * @paramsträng $ email E-postadressen. * @param heltal $ storlek Avatarstorleken. * @returnsträng Källan för ett bildelement. * / offentliga statiska funktioner gör ($ email, $ size = 32) // konvertera vårt mail till en md5 hash $ email = md5 ($ email); // returnera bildelementets retur " 

Nu kommer Laravel att veta var man ska hitta definitionen för vår Gravvy klass, och laddar källan när den först behöver den. Väldigt effektiv!

De väg() Metoden är en hjälpfunktion som returnerar den absoluta sökvägen till användbara mappar som används av Laravel. I det här fallet använder vi den för att hämta den absoluta sökvägen till buntkatalogen.

Nu när vi har vår Gravvy-klass kan vi försöka använda den från en kontroller för att se om vi får den förväntade effekten, men jag tycker att det skulle vara lämpligare att skriva ett test.

Precis som värdprogrammet är enhetstester tillgängliga inom bunten. Låt oss skapa en tester mappen i buntet och lägg till en ny fil, kallad general.test.php.

assertEquals (Gravvy :: make ('[email protected] '),'');  / ** * Testa att en avatarsutmatning visas som förväntat när * specificerar en anpassad avatarstorlek. * * @return void * / public function testAvatarImageIsGeneratedWithSize () // starta gravvy-bunten Bundle :: start ('gravvy'); // kontrollera att utmatningen matchar den förväntade $ this-> assertEquals (Gravvy :: make ('[email protected] ', 64),''); 

Ovan har vi skrivit två PHPUnit-tester: en för att testa resultatet av att generera en avatar med ett e-postmeddelande och en annan som också anger en avatarstorlek i pixlar. Du märker att vi ringer Bundle :: start ( "gravvy) för att manuellt starta buntet. Detta beror på att Laravel inte laddar buntar automatiskt via kommandoradsgränssnittet för närvarande.

Som kärnteammedlem vill jag påpeka att vi avser att lösa detta i en framtida version!

Låt oss använda Artisan att köra våra PHPUnit-tester genom att skriva testa kommandot och använda buntnamnet, gravvy, som en parameter.

php artisan test gravvy

Bra! Våra test har blivit framgångsrika på första försöket, och vårt ego har vuxit - bara lite!

Nu när vår Gravvy-klass har testats kan människor använda den i sina egna applikationer! Låt oss ta bunten ett steg längre och skapa ett par enkla sidor för att generera och förhandsgranska gravatars. Vi kan använda det här exemplet för att lära oss hur routingsystemet hanterar buntar.

Till att börja med, låt oss skapa en ny förhandsgranskningsregulator för vårt paket. Vi måste skapa en controllers katalog i buntet, och inom det lägger vi till en ny fil: preview.php.

 

Kontrollerns namn måste vara prefixat med buntnamnet och bifogas med _Kontrollant - som med normala kontroller.

Vi kan skapa några vägar för att kartlägga våra kontrolleråtgärder till förnuftiga URI, men skulle det inte vara bättre om vi kunde låta användaren av vårt paket bestämma om URI-basen skulle användas? Det skulle? Låt oss göra det då!

Genom att lägga till en 'handles' => 'gravvy' nyckelvärdesparet i paketkonfigurationsmatrisen, kan vi tillåta användaren att ändra den utan att ändra koden i buntet själv. Här är den resulterande konfigurationen i application / bundles.php.

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

Nu kan vi använda (:bunt) platshållare i våra rutter, som kommer att ersättas med värdet av handtag alternativ. Låt oss skapa en routes.php fil i roten till våra buntar och lägg till några rutter.

Rutt :: få ('(: bunt) / form', 'gravvy :: förhandsgranskning @ form'); Rutt :: post ('(: bunt) / förhandsgranskning', 'gravvy :: förhandsgranskning @ förhandsvisning');

Vi har vägen GET gravvy / form som är mappad till form handling av Förhandsvisning controller och POST gravvy / förhandsvisning som är mappad till förhandsvisning handling av Förhandsvisning kontrollant.

Låt oss skapa de associerade vyerna för våra kontrolleråtgärder. du kan göra dem så komplexa och vackra som du vill, men jag kommer att hålla dem enkla. Skapa först en visningar mappen i buntet, precis som med programkatalogen.

 

Nu när vi har ett formulär som skickar ett e-post- och storlekfält till förhandsvisning @ förhandsvisning kontroller / åtgärdspar, låt oss skapa en förhandsgranskningssida för den genererade avbildaren; Vi använder ett attribut, namngivet $ elementet, att hålla sin källa.

 

$ element

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

Nu måste vi ändra förhandsvisning åtgärder för att utnyttja de uppgifter som lämnats in från formuläret.

/ ** * Visa den resulterande avataren. * / public function action_preview () // få data från vår form $ email = Input :: get ('email'); $ size = Input :: get ('size'); // skapa avatar $ avatar = Gravvy :: make ($ email, $ size); // ladda förhandsgranskningsvyn Retur Visa :: gör ('gravvy :: förhandsgranskning') -> med ('element', $ avatar); 

Vi hämtar POST-data och använder den för att skapa vår avatar. Vi måste också lägga till en med() metod till Se :: göra () kedja för att låta elementet användas inom vyn.

Vi kan äntligen testa vårt avatar förhandsgranskningssystem! Ta en titt på / Gravvy / formen URI och ge det ett steg! Allt fungerar som förväntat.

Det här kanske inte är det bästa sättet att organisera ditt paket, men det markerar några av de användbara sakerna som är möjliga. Ha kul att skapa egna buntar, och var noga med att överväga att publicera dem på buntens webbplats.


Publicera ett paket

När din bunt är i funktionellt skick kan du överväga att notera det i Laravel Bundles Directory. Låt oss gå igenom processen för att skicka in en ny bunt.

Först måste du ha ett GitHub-konto och ha din bunt versioned i ett offentligt arkiv. GitHub erbjuder gratis konton med ett obegränsat antal offentliga repositories; Du hittar deras anmälningsformulär här.

Om du är ny på versionskontroll med Git, föreslår jag att du läser den stora serien Git-artiklar här på Webuts+.

När du har ditt konto och kod i ordning, se till att den senaste versionen av din bunt finns inom "master" -grenen, och att roten till din bunt (där start.php skulle vara) är roten till förvaret, snarare än en underkatalog.

Nästa besök Laravel Bundles Directory hemsida, och logga in med ditt GitHub-uppgifter.

Klicka nu på knappen "Skicka en bunt", välj ditt buntförråd från rullgardinsmenyn och tryck på knappen "Fortsätt".

Anmälningsformuläret är ganska rakt framåt, men här är några "gotchas" som du inte får plats på.

namn

Namn är ett bokstäver med små bokstäver som används för att installera din ansökan. Det måste vara ett kort men korrekt ord för att beskriva din bunt.

Sammanfattning / Beskrivning

Dessa fält kan innehålla markdown-format innehåll. Så gärna kopiera innehållet från din GitHub README.md fil.

Beroenden / Taggar

Använd kommatecken på tangentbordet för att skilja taggar och beroenden. Fältet Beroende bör innehålla det kortinstallerade sökordet för det paket som finns som ett beroende av det paket du skickar.

Aktiva

De Aktiva Fältet bestämmer helt enkelt huruvida bunten kommer att visas för andra användare. Du kan fortfarande installera inaktiva buntar genom att installera sökordet för teständamål. Ange det här fältet till "Ja" bara när du är glad för att andra kan använda ditt paket.

När du klickar på "Spara" -knappen har din bunt skickats in, och om den är markerad som "Aktiv" visas i buntlistan. Du kan alltid redigera din buntlista vid ett senare tillfälle.


Hitta Bundlar

Bundlar som har delats med Laravel-samhället finns listade i katalogen Bundles på http://bundles.laravel.com.

Du kan bläddra bland buntar efter kategori, eller använd sökfunktionen för att hitta buntet du letar efter. När du väl har hittat ett paket som uppfyller dina krav, ta en titt på fliken "Installation" i buntens profil för att hitta installationssökordet.


Installera ett paket

När du har installeringssökordet för ett paket kan du installera det från basen av ditt projekt med kommandoradsgränssnittet "Artisan", och det är bunt: installera kommando. Till exempel…

php artisan bunt: installera bob

Artisan kommer att konsultera API-buntarna för att hämta sökvägen till bunten GitHub-förvaret och förvar av alla dess beroende. Det hämtar sedan källkodspaket direkt från GitHub och extraherar dem till /buntar katalog för dig.

Du måste manuellt lägga till buntnamnet i arrayen inom application / bundles.php för att paketet ska bli aktiverat.

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

I vissa situationer kan du behöva lägga till extra information till detta array inträde för att underlätta auto-start, eller rikta vissa vägar till buntet. Författaren kommer att ha lämnat denna extra information i buntens beskrivning, om så är fallet.


Tack för att du läser och njut av att skapa egna buntar med Laravel! Om du vill lära dig mer om Laravel, var noga med att hämta min bok!