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 somDEFAULT_BUNDLE
.
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.
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:
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.
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.
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.
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.
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, kalladgeneral.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 gravvyBra! 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 iapplication / 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 avhandtag
alternativ. Låt oss skapa enroutes.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 tillform
handling avFörhandsvisning
controller ochPOST gravvy / förhandsvisning
som är mappad tillförhandsvisning
handling avFö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.
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.
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.
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!