Essentials of Creating Laravel Bundles

Laravel PHP-rammeverket tilbyr sitt buntesystem for å tillate utviklere å omfordele nyttige pakker med kode, eller å organisere applikasjoner i flere "bunter" av mindre applikasjoner.

I denne opplæringen lærer vi innspillene og utdragene for å lage og distribuere bunter fra grunnen av.

En Laravel-pakke har tilgang til alle funksjonene som rammen tilbyr til vertsprogrammet, inkludert ruting, migreringer, tester, visninger og mange andre nyttige funksjoner.

Her er en liten hemmelighet, mellom oss: applikasjon mappe av Laravel-kildepakken er også et bunt, som Laravel refererer til som DEFAULT_BUNDLE.


Når skal du lage en pakke?

Før jeg skriver et nytt stykke kode, liker jeg å stille meg noen enkle spørsmål for å finne ut om det passer for et bunt. La meg dele denne teknikken med deg.

Kunne denne koden være nyttig for andre?

Hvis svaret på dette spørsmålet er ja, så vil jeg først sørge for at noen ikke allerede har opprettet en lignende pakke eller pakke. Annet enn læringsformål er det meningsløst å gjenskape hjulet. Hvis den andre pakken har en høy nok standard som skal brukes i prosjektet ditt, bruk da det i stedet og spar deg selv.

For det andre tenker jeg på koden og bestemmer hvorvidt det kan være nyttig for brukere av andre rammer, eller folk som ikke bruker et rammeverk i det hele tatt. Hvis koden ikke er relatert til Laravel-rammeverket og ikke trenger å benytte Laravels kjerneklasser, vil jeg opprette en Composer-pakke i stedet. Komponistpakker blir ofte standard for deling av kode som ikke er begrenset til et enkelt rammeverk eller prosjekt.

For mer informasjon om Composer, se følgende linker:

  • Offisiell dokumentasjon
  • Enkel pakkebehandling med komponist

Hvis koden kan være nyttig for andre, og er avhengig av Laravel-rammen, har du en god grunn til å lage en ny pakke.

Må jeg skrive denne koden igjen?

DRY er navnet på spillet.

Hvis koden gir funksjonalitet som du skriver ofte, så er det fornuftig å lage et bunt. Tørk (Gjenta ikke!) Er navnet på spillet.

Kunne denne koden betraktes som et frittstående program?

For eksempel kan du bygge et enkelt nettsted som blant annet har en bloggkomponent. Bloggen kan betraktes som en separat applikasjon som skal inneholde en bunt for mye større organisering av prosjektet.

Et annet eksempel er en administrativ seksjon, eller "back-end" for nettstedet ditt. Denne delen kan enkelt betraktes som en separat komponent fra hovedapplikasjonen, og kan i stedet organiseres i en eller flere bunter.

Ville denne koden passe inn i en enkelt klasse?

Hvis dette er tilfelle, kan du vurdere å skrive et "Bibliotek" i stedet. Et bibliotek er en enkelt klasse som inneholder gjenbrukbar kode. Det kan legges til et Laravel prosjekt enkelt ved å slippe klassen inn i application / bibliotek / katalog, som automatisk er lastet inn automatisk.


Opprette en pakke

La oss lage en enkel plug-in som samhandler med Gravatar-tjenesten for å tilby en enkel metode for å generere avatarer av forskjellige størrelser i hovedapplikasjonen. Vi vil også legge til den nødvendige funksjonaliteten for å skrive inn en e-postadresse og avatar størrelse og forhåndsvise den tilknyttede gravatar på siden.

La oss begynne med å opprette en ny katalog i / bunter katalog av prosjektet vårt. Vi vil ringe katalogen og vår pakke gravvy. Ikke saus ... gravvy.

La oss legge til gravvy til bunndisplayet innenfor application / bundles.php slik at vi kan teste det mens vi går. Vi vil legge til en 'auto' => sant alternativ til arrayet slik at bunken startes automatisk, og alle autoloader mappings vi lager vil være tilgjengelige for hele Laravel.

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

Først må vi opprette et lite bibliotek som vil hente brukerens avatar ved hjelp av en e-postadresse. Opprett en ny fil i roten til bunten, oppkalt gravvy.php. La oss lage en klasse, kalt Gravvy med en statisk metode, gjøre(), å replikere navngivningssystemet som brukes av Laravels egne biblioteker.

De gjøre() Metoden vil godta to parametere: En e-postadresse og et heltall for å representere størrelsen på avataren for å hente.

 * / klasse Gravvy / ** * Lag et nytt bildeelement fra en e-postadresse. * @param string $ email E-postadressen. * @param heltall $ size Avatar størrelsen. * @returnstreng Kilden til et bildeelement. * / offentlig statisk funksjon lage ($ email, $ size = 32) // konvertere vår e-post til en md5 hash $ email = md5 ($ email); // returnere bildeelementet tilbake '');  / ** * Test at en avatarsutgang vises som forventet når * angir en tilpasset avatarstørrelse. * * @return void * / offentlig funksjon testAvatarImageIsGeneratedWithSize () // start gravvy bunt Bundle :: start ('gravvy'); // sjekk at utgangen stemmer overens med forventet $ this-> assertEquals (Gravvy :: make ('[email protected] ', 64),''); 

Ovenfor har vi skrevet to PHPUnit-tester: en for å teste utdataene for å generere en avatar ved hjelp av en e-post, og en annen som også angir en avatarstørrelse i piksler. Du vil merke at vi ringer Bundle :: starte ( 'gravvy') å starte pakken manuelt. Dette skyldes at Laravel ikke laster automatisk bunter via kommandolinjegrensesnittet for øyeblikket.

Som kjerneamedlem, vil jeg påpeke at vi har til hensikt å løse dette i en fremtidig versjon!

La oss bruke Artisan til å kjøre våre PHPUnit-tester ved å skrive inn test kommandoen og bruke buntnavnet, gravvy, som en parameter.

php artisan test gravvy

Flott! Våre tester har gått vellykket på første forsøk, og vårt ego er vokst - bare litt!

Nå som vår Gravvy-klasse har blitt testet, kan folk bruke den i egne applikasjoner! La oss ta bunten et skritt videre og lage et par enkle sider for å generere og forhåndsvise gravatars. Vi kan bruke dette eksemplet for å lære hvordan rutingsystemet håndterer bunter.

For å begynne, la oss lage en ny forhåndsvisningskontroller for vårt pakke. Vi må opprette en kontrollere katalog i bunten, og i det, legger vi til en ny fil: preview.php.

 

Kontrollørens navn må være prefiks med buntnavnet, og vedlagt med _Controller - som med normale kontroller.

Vi kunne lage noen ruter for å kartlegge våre kontrollerhandlinger til fornuftige URIer, men ville det ikke vært bedre hvis vi kunne la brukeren av bunken bestemme oss for basen URI å bruke? Det ville? La oss gjøre det da!

Ved å legge til en 'håndtak' => 'gravvy' nøkkelverdier-paret til konfigurasjonsarrangementet for bunter, kan vi tillate brukeren å endre den uten å endre koden til bunten selv. Her er den resulterende konfigurasjonen i application / bundles.php.

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

Nå kan vi bruke (:bunt) stedholder i våre ruter, som vil bli erstattet med verdien av håndtak alternativ. La oss lage en routes.php filen i roten av våre bunter og legg til noen ruter.

Rute :: få ('(: bunt) / form', 'gravvy :: forhåndsvisning @ form'); Rute :: post ('(: bunt) / forhåndsvisning', 'gravvy :: forhåndsvisning @ forhåndsvisning');

Vi har ruten GET gravvy / form som er kartlagt til skjema handling av Forhåndsvisning kontrolleren og POST gravvy / forhåndsvisning som er kartlagt til forhåndsvisning handling av Forhåndsvisning kontrolleren.

La oss lage de tilknyttede visningene for våre kontrollerhandlinger; du kan gjøre dem så komplekse og vakre som du vil, men jeg skal holde dem enkle. Først opprett en visninger mappe i bunten, akkurat som med søknadskatalogen.

 

Nå som vi har et skjema som sender inn et e-post- og størrelsesfelt til forhåndsvisning @ forhåndsvisning kontroller / action-par, la oss lage en forhåndsvisningsside for den genererte avataren; Vi bruker et attributt, navngitt $ element, å holde sin kilde.

 

$ element

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

Nå må vi endre forhåndsvisning handling for å gjøre bruk av dataene som er sendt fra skjemaet.

/ ** * Vis den resulterende avataren. * / offentlig funksjon action_preview () // få data fra vårt skjema $ email = Input :: get ('email'); $ size = Input :: get ('size'); // generere avatar $ avatar = Gravvy :: lage ($ email, $ size); // laste forhåndsvisningsvisningen tilbake Vis :: lage ('gravvy :: forhåndsvisning') -> med ('element', $ avatar); 

Vi henter POST-dataene og bruker den til å lage vår avatar. Vi må også legge til en med() metode til Vis :: gjøre () kjede for å tillate elementet som skal brukes i visningen.

Vi kan endelig teste vårt avatarsystem for avatere! Ta en titt på / Gravvy / skjema URI og gi det en tur! Alt fungerer som forventet.

Dette er kanskje ikke den beste måten å organisere buntet på, men det markerer noen av de nyttige tingene som er mulige. Ha det gøy å lage dine egne bunter, og vær sikker på å vurdere å publisere dem på bunternes nettsted.


Publisere en pakke

Når bunten din er i en funksjonell tilstand, kan du vurdere å notere det i Laravel Bundles Directory. La oss gå gjennom prosessen med å sende inn et nytt bunt.

Først må du ha en GitHub-konto, og få bunten din versjoned i et offentlig lager. GitHub tilbyr gratis kontoer med et ubegrenset antall offentlige repositorier; Her finner du registreringsskjemaet her.

Hvis du er ny til versjonskontroll med Git, foreslår jeg at du leser den store serien Git-artikler her på Nettuts+.

Når du har din konto og kode i rekkefølge, må du sørge for at den nyeste versjonen av bunten din finnes i "master" -grenen, og at roten til bunten din (hvor start.php ville være) er roten til depotet, snarere enn en underkatalog.

Neste besøk Laravel Bundles Directory-nettstedet, og logg inn ved hjelp av GitHub-legitimasjonene dine.

Klikk nå på «Send en pakke» -knapp, velg buntearkivet fra rullegardinmenyen og trykk på Fortsett-knappen.

Registreringsskjemaet er ganske rett fram, men her er noen "gotchas" som du ikke kan få øye på.

Navn

Navn er et små bokstaver som brukes til å installere søknaden din. Det må være et kort, men nøyaktig ord for å beskrive buntet ditt.

Oppsummering / beskrivelse

Disse feltene kan inneholde markdown-format innhold. Så vær så snill å kopiere innholdet fra GitHub README.md fil.

Avhengigheter / Tags

Bruk komma-knappen på tastaturet for å skille mellom tagger og avhengigheter. Avhengighetsfeltet bør inneholde det korte installeringsordet for bunten som eksisterer som en avhengighet for bunten du sender inn.

Aktiv

De Aktiv feltet avgjør bare om bunken vil bli vist til andre brukere eller ikke. Du kan fortsatt installere inaktive bunter ved å installere søkeordet for testing. Sett dette feltet til "Ja" bare når du er glad for at andre kan bruke bunten din.

Når du har klikket på "Lagre" -knappen, har bunten din blitt sendt, og hvis den er merket som «Aktiv», vises i buntlister. Du kan alltid redigere buntlisten din på et senere tidspunkt.


Finne pakker

Bundler som har blitt delt med Laravel-fellesskapet, er oppført i katalogen Bundles på http://bundles.laravel.com.

Du kan bla gjennom bunter etter kategori, eller bruk søkefunksjonen for å finne bunten du leter etter. Når du har funnet et bunt som oppfyller dine krav, kan du se på "Installasjon" -fanen i buntens profil for å finne installeringsordet.


Installere en pakke

Når du har installeringssøkeordet for et bunt, kan du installere det fra bunnen av prosjektet ditt ved hjelp av "Artisan" -kommandolinjegrensesnittet, og det er pakke: installere kommando. For eksempel…

php artisan bundle: installer bob

Artisan vil konsultere API-bunter for å hente banen til bunter GitHub-depotet og lagrene av alle dens avhengigheter. Det vil da laste ned kildepakker direkte fra GitHub, og trekk dem ut til / bunter katalog for deg.

Du må manuelt legge til buntnavnet i arrayet innenfor application / bundles.php for bunten blir aktivert.

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

I enkelte situasjoner må du kanskje legge til ekstra informasjon til dette matrise oppføring for å lette auto start, eller rette bestemte ruter til bunten. Forfatteren vil ha gitt denne ekstra informasjonen i pakkenes beskrivelse, hvis dette er tilfelle.


Takk for å lese og nyt å lage dine egne bunter med Laravel! Hvis du vil lære mer om Laravel, vær sikker på å hente boken min!