Hva er nytt i Laravel 5

PHP-fellesskapet har nylig blitt velsignet med en ny utgivelse av en av sine mest elskede rammer, Laravel. Versjon 5.0.1 er en stor utgave, så det er ikke bare noen flotte nye funksjoner tilgjengelig, men rammens arkitektoniske grunnlag er også blitt endret til en viss grad. Så uten videre vil jeg dykke rett inn i rammen og vise deg alle de gode tingene den nyeste utgivelsen har å tilby.

1. Katalogstruktur

Mappestrukturen til et Laravel-prosjekt har gått gjennom en omfattende overhaling. Laravel 5 implementerer PSR-4 autoloading standard, som betyr at alle klassene dine er fullstendig navngitt. Standardnavnet for ditt webprogram er app, som du kan endre ved hjelp av php artisan app: navn kommando. 

Modellene dine faller under standardappnavnet og er inne i appmappen. Programmets ressurser, visninger og språkfiler er i ressursmappen. Leverandør-, offentlig- og oppstarts kataloger beholder sin plass som i de eldre versjonene av rammen, mens konfigurasjons-, lagrings-, database- og teste-kataloger er blitt flyttet til prosjektets rot. 

Hvis du ser inn i app-mappen, vil du legge merke til mange klasser, men vær ikke bekymret for dem for nå - vi skal komme inn på det i løpet av denne artikkelen. 

Miljødeteksjon har blitt betydelig forbedret. I stedet for alle de komplekse nestede konfigurasjonsmappene, har du en .env fil ved roten til prosjektet ditt for å ta vare på applikasjonsmiljøet og alle miljøvariablene. Også, den php artisan tinker kommandoen bruker nå Psysh-pakken i stedet for Boris.

2. Metode Injeksjon

Metodeinjeksjon har blitt sterkt forenklet. Inntil versjon 4.2 måtte du be om Inversion of Control (IoC) -beholderen for å gi en klasseeksempel eller opprette den i konstruktørens konstruktør for å gjøre den tilgjengelig under klassens omfang. Nå kan du deklarere typen hintet klasseeksempel i kontrolleringsmetodeens signatur og IoC-beholderen vil ta vare på den, selv om det er flere parametere i kontrollfunksjonsfunksjonens signatur.

3. Kontrakter

Kontrakter er faktisk grensesnitt klasser i forklædning. Grensesnitt er en velprøvd metode for å fjerne klassenavhengighet og utvikle løst koblede programvarekomponenter. De hjelper deg generelt med å følge "avhenge av abstraksjoner, ikke konkretjoner" regel. 

Laravel kjøper inn i samme filosofi. De fleste av hovedkomponentene benytter seg av disse kontraktene for å holde rammene løst koblet. Du kan også bruke dem i din pakkeutvikling. 

Hvis for eksempel pakken din krever caching, kan du i stedet for å bruke en konkret hurtigbufferklasse implementere Belyse \ Kontrakter \ Cache grensesnitt, og du vil være fri til å koble hurtigbufferimplementeringen inn og ut uten å endre mye av pakken din. 

Du kan spørre hvordan Laravel går om å finne ut i implementeringen av en bestemt kontrakt. Alt det magiske skjer inni Belyse \ Foundation \ Application.php fil.

4. Rute Caching

Artisan har en ny rute caching funksjon. Rutekorking øker hastigheten på søknadens rutegistrering, med tydelige synlige ytelsesfordeler. Men hvis søknaden din omhandler et lite antall ruter, ser du kanskje ikke hvilken effekt rutenes caching skal ha, noe som betyr at den er mer egnet til saker der søknaden din har et stort antall ruter. 

Kommandoene php artisan rute: cache og php artisan rute: klar Slå rutekache på og av henholdsvis. Når rute-caching er slått på, vil eventuelle endringer du gjør i programruter, ikke tre i kraft. Rute caching vil vanligvis bli implementert som en del av distribusjonsprosessen.

5. Rute Middleware

Middleware kan brukes til å legge til ekstra lag på HTTP-rutene dine. Hvis du vil at kode skal utføres før hver rute eller før bestemte ruter i søknaden din, er et slikt stykke kode en god form for en mellomvareklasseklasse. 

For eksempel, la oss si at du vil blokkere et visst utvalg av IPer fra programmet ditt for å gjøre søknaden din utilgjengelig i den regionen. I så fall må du sjekke klientens IP før hver forespørsel og tillate / avvise dem oppføring til søknaden din. Dette vil være mye å gjøre i dine kontrollerhandlinger, så du vil bruke mellomvare i stedet. Generer en middleware-klasse på app / Http / Middleware / RegionMiddleware.php ved bruk av php artisan make: middleware "RegionMiddleware".

Du kan deretter registrere mellomprogramvaren i app / Http / Kernel.php fil ved å legge den til $ mellomvare array. Du kan også legge til mellomvare på bestemte ruter ved å legge det til $ routeMiddleware array og deretter passere den i rutealternativer.

6. Godkjenning

Autentisering er en del av nesten alle webapplikasjonene du utvikler, og mye tid blir brukt til å skrive godkjenningspanelet. Dette er ikke tilfelle lenger med Laravel 5. Databaseoverføringene, modellene, kontrollerne og visningene må bare konfigureres for å få alt til å fungere. Laravel 5 har en Registrar-tjeneste, som er en avgjørende del av dette ut av boksen, klar til bruk av autentiseringssystem.

7. Hendelser

Borte er gamle dager da du pleide å erklære programhendelser som strenge, fordi hendelsesobjektet nå er tilgjengelig. Du kan opprette hendelsesobjekter ved hjelp av php artisan make: event og hendelseshåndteringsobjekter bruker php artisan handler: event . Alle hendelser og handler klasser går inn i app / Events og app / håndterere / Events mappe henholdsvis. 

Når du har opprettet hendelsene dine, kan du skyte dem av Hendelse :: brann (ny begivenhet (params)). For å feste lyttere til hendelsene dine må du redigere $ lytte array i app / Leverandører / EventServiceProvider.php fil.

8. Kommandoer

Laravel 5 lar deg inkapslere din komplekse forretningslogikk til enkle kommandobjekter. 

For eksempel, la oss si at du har en nettbutikk hvor brukere registrerer og kjøper elektroniske gjenstander. Registreringsprosessen kan innebære å verifisere brukerens e-postadresse og kredittkort. 

Det kan være fristende å dumpe all denne koden i en kontrollerhandling, men det er ikke lurt å ha kode som bare vil fungere under HTTP-forespørselssammenheng, være vanskelig å testenhet på grunn av HTTP-forespørsler, og opphev kontrollen. 

Å gjøre dette ved hjelp av kommandoer gir deg flere fordeler. Først vil din selvbetjente kode være modulær og en bris til enhetstest. For det andre, siden Laravel lar deg kjøre kommandoer, kan din forretningslogikk kjøres asynkront i bakgrunnen, noe som er umulig å gjøre med kontrollerhandlinger.

9. Kjø- og oppgaveplanlegging

En klar til brukskø leveres som standard med rammen, slik at du ikke trenger å bruke noen tredjepartspakker. Alt du trenger å gjøre er å konfigurere køen, og du bør være god å gå. Alle dine køerbare jobber blir holdt i app / Commands mappe. Når du har opprettet dine købare kommandoer, kan du bare trykke dem på køen ved hjelp av Kø: trykk (nytt kommando ($ params))

Oppgaveplanlegging har også blitt forbedret mye. Tidligere måtte du sette opp en cron for hver konsollkommando, men ikke mer. Du trenger bare en enkelt cron-oppføring, og du kan planlegge oppgavene i programmet ved hjelp av mye syntaks sukker.

10. Flere filsystemer

Laravel 5 har opprinnelig støtte for flere filsystemer ved hjelp av tredjepartspakken Flysystem. Din søknad kan bruke lokal eller sky lagring ved hjelp av enkel konfigurasjon. Du trenger bare å jobbe med filsystemfasaden, og de underliggende lagringsoperasjonene blir tatt vare på automatisk. Du kan konfigurere lagringsalternativer i config / filesystems.php fil. Hvis du trenger tilgang til alle tilgjengelige lagringsalternativer i prosjektet, kan du omgå filsystemfacaden og arbeide med diskfacaden direkte.

11. Be om objekt

Forespørselsobjektet hjelper deg med å injisere godkjenning / autorisasjon og data validering logikk i dine forespørsler. Når du har implementert forretningslogikken din i forespørselsobjektet, må du skrive hinten til en kontrollers handling, akkurat som ved metodeinjeksjon. 

La oss dekryptere dette ved hjelp av et kodeeksempel. Henrette php artisan make: be om TutsPlusRequest å generere en forespørselsklasse på app / HTTP / forespørsler / TutsPlusRequest.php. Hvis du ser på innholdet i den filen, vil du legge merke til at håndverkeren har generert en reglermetode og en autoriseringsmetode. Du skal legge til noen valideringsregler i regelmetoden din.

 'kreves | epost', 'passord' => 'kreves | min: 8'];  // i kontrollerhandlingen din offentlige funksjon postLogin (\ App \ Http \ Forespørsler \ TutsPlusRequest $ request) // kode her vil ikke brenne // hvis valideringsreglene // i forespørselen mislykkes?>

Du vil at e-postadressen skal være en gyldig epost og passordet skal være minst åtte tegn. Begge feltene kreves. Hvis noen av disse valideringsreglene feiler, blir ikke kontrolleren din utført, og brukeren blir omdirigert til skjema siden.

12. Elixir

Elixir er en GulpJS API for Laravel som hjelper deg med å definere gulp-oppgaver for dine applikasjoner. Dykking i GulpJS er utenfor rammen av denne artikkelen, men du kan se på det offisielle nettstedet og Elixir for mer informasjon. 

En typisk brukstilfelle for GulpJS er å redusere / sammenkoble CSS / JS-filene dine. Dine pakkepakker ligger i package.json fil ved roten til prosjektet ditt, mens oppgavene som må kjøres, er spesifisert i gulpfile.js fil. For de av dere som allerede er kjent med GulpJS-arbeidsflyten, ville dette være mer fornuftig, siden Elixir bare hjelper deg med å integrere GulpJS i Laravel-appene dine.

13. Laravel Socialite

Socialite er en første partipakke som gjør integrasjon av tredjepartsautentisering til dine webprogrammer en cinch. Siden det ikke er inkludert som standard, må du trekke det inn ved hjelp av komponist. Når det er gjort, må du konfigurere leverandørene du ønsker å bruke i søknaden din. For tiden støtter Socialite Twitter, GitHub, Google og Facebook.

gardiner!

Jeg håper du likte å se nærmere på Laravel 5s detaljer. Fra et arkitektonisk perspektiv tror jeg rammene har tatt store sprang fremover, noe som vil gå langt i å holde din webapplikasjonskode organisert og frigjøre deg fra marerittet som er vedlikehold.

.