Hvorfor Laravel tar PHP-fellesskapet med storm

Jeg må innrømme: På et tidspunkt følte jeg meg litt ned på PHP-språket. En rekke gripende PHP-hate-artikler sirklet på nettet som et virus, og noen av dens flaggskipsrammer, som CodeIgniter, ble raskt voksende foreldet. Ruby on Rails syntes hele tiden å lede pakken med hensyn til innovasjon og enkel utvikling. Etter hvert som tiden var på, fant jeg meg selv å nå frem til min Ruby verktøylinje mer og mer.

Men da oppdaget jeg en ny, elegant ramme, kalt Laravel. Først avviste jeg det som en annen Sinatra klone som raskt ville redusere til ingenting, da ledende utvikler forlatt det. Men likevel, hver uke, var de sosiale nettverkene mine i rov, og roste Laravels lesbarhet. "Kan det være," tenkte jeg på meg selv, "at PHP endelig har et virkelig moderne rammeverk?"

Lær mer om Laravel på http://laravel.com

Ikke lenger var jeg villig til å sitte på sidelinjen; Det var på tide å grave inn. Et år senere, og jeg er en av de største evangelister. Laravel gjør faktisk PHP morsomt igjen! Enda bedre tror jeg ikke lenger at PHP er for alltid dømt til hovedsakelig personlige nettsteder og stygge WordPress-blogger. Nei; Faktisk er det denne forfatterens tro på at takket være Laravel, Composer og PHP 5.5, er vi i ferd med å oppleve den neste renessansen av nettets mest populære server-side språk.

For å installere den nyeste utviklingsversjonen av Laravel (v4), må du først installere Komponist. Deretter klone bare repoen, og installer avhengighetene. git klon git: //github.com/illuminate/app.git myApp og komponent installasjon. Du er klar til å gå!


Veltalende

De fleste PHP-utviklere starter reisen ved å neste utallige linjer med SQL direkte inn i deres frigid, ulæselige PHP. Unødvendig å si, unntatt de mest grunnleggende av nettsteder, fører dette raskt til et uoppnåelig rot.

Husk da du først hørte om Ruby on Rails 'ActiveRecord? Vel, i PHP-enden av verden er Eloquent den fremste implementeringen.

Trenger noen eksempler?

// Hent alle oppgaver $ tasks = Oppgave :: alle (); // Hent oppgaven med et ID på 1 $ oppgave = Oppgave :: finn (1); // Oppdater en oppgave $ task = Oppgave :: finn (1); $ task-> title = 'Sett denne informasjonen ned!'; $ Oppgave-> Lagre (); // Opprett en ny oppgave Oppgave :: opprett (['title' => 'Skriv artikkel']); // Slett en oppgave Oppgave :: finn (1) -> slett ();

Folk, det er ikke mulig å skrive mer lesbar kode i PHP! Nå ville det være en ting hvis Eloquent bare tillot deg å utføre grunnleggende CRUD-operasjoner på et bord, men det er absolutt ikke tilfelle.

Vurder tabellrelasjoner, for eksempel en bruker og hans / hennes respektive oppgaver. I Laravel, etter å ha satt en rask oppslagsmetode for hver modell, kan vi enkelt håndtere ett-til-ett-forhold, eller en forening for den saks skyld. Her er noen eksempler på å appetitere.

// Få alle oppgaver av forfatteren med et ID på 1 $ oppgaver = Bruker :: finn (1) -> oppgaver; // Få forfatteren av en oppgave $ author = Oppgave :: finn (5) -> bruker () -> brukernavn; // Sett inn en ny oppgave av forfatter $ task = ny oppgave ([tittel: 'Gå til butikk.']); Bruker :: finne (1) -> oppgaver () -> Sett ($ oppgave);

Det er ikke en strekk å vurdere Eloquent å være den beste ActiveRecord-implementeringen i PHP-språket.


Komponistpakker

Installer Komponist.

Begynn med Laravel 4 (for tiden i Alpha), vil hele rammen bli modulert og tilgjengelig som individuelle Composer-pakker.

Komponist er et pakkesystem for PHP som ligner PEAR, men bedre. Det gjør prosessen med avhengighetsstyring så enkelt som mulig.

Tenk på det eksisterende rammeverkets økosystem. Akkurat nå er du tvunget til å leve med hver rammeverkets kjernesett av funksjoner. Du kan ikke velge å si, bruk Eloquent i en CakePHP-applikasjon. Som du kan forestille deg, har denne sannheten ført til en vanvittig prosess med å gjenoppfinne hjulet igjen og igjen ... og over.

Damer og herrer, fremtiden for PHP er en modulær. Hvorfor installere en oppblåst, massiv ramme, når du bare trenger noen av sine tilbud? Vel, snart må du ikke. Bare krever Eloquent i et enkelt prosjekt? Fine - ikke et problem i det hele tatt! Bare installer den gjennom Composer, og fortsett!

Så, hvis vi flytter til en mer pakkebasert, modulær PHP-verden, hvordan passer Laravel inn? Vel, tenk på det som en forhåndsbestemt samling av pakker, pakket inn i en bue! Enda bedre, bør du oppdatere til den nyeste versjonen av rammen, det er like enkelt som å løpe komponistoppdatering.

Som et eksempel på fleksibiliteten som dette gir, la vi legge til det populære Mockery testing-biblioteket til en Laravel-applikasjon. Begynn med et nytt Laravel 4-prosjekt, og rediger det composer.json fil for å kreve Mockery.

"belyser / grunnlegger": "> = 1.0.0", "hån / mockery": "dev-master", "autoload": "classmap": ["app / controllers" app / modeller "," app / database / migrasjoner "," app / tester / TestCase.php "]

Se Packagist.org for en liste over tilgjengelige Composer-pakker, samt installasjonsinstruksjoner.

Nå som vi har informert Komponisten om at vår søknad krever Mockery, kan vi installere de aktuelle avhengighetene.

komponistoppdatering

Og det er det! Vi kan nå bruke Mockery i våre tester. Dette er kraften til Composer og Laravel 4 på jobb! Vi har hjul; la oss slutte å lage nye! Hundrevis av hundrevis av pakker er tilgjengelige gjennom Packagist.org.

   

Hundrevis av hundrevis av pakker er tilgjengelige gjennom Packagist.org.


ruter

De fleste begynnelsen PHP-utviklere er ikke kjent med noe annet enn det mest naturlige av rutesystemene. Opprett et katalogtreet for å matche ønsket URI, og fortsett. For eksempel, legg til en index.php fil til følgende katalog: blog / admin /, og nå kan du få tilgang til det ved å bla til: localhost: 8888 / blogg / admin / index.php. Lett! Vel, kanskje i begynnelsen; men du vil sikkert finne ut at du trenger mer fleksibilitet og kontroll over hvilken rute som utløses i søknaden din.

Laravel tar en utrolig enkel og brukervennlig tilnærming til ruting. For eksempel, la oss skrive den nødvendige ruten for å vise en visning for en brukers profil.

Rute :: få ('brukere / id', funksjon ($ id) // finn brukeren $ user = Bruker :: finn ($ id); // visningsvisning ('users.profile') -> med ('bruker', $ bruker););

Nå, når en bruker ber om det example.com/users/1, de brukere / profile.php visning vil bli gjengitt.

Alternativt kan vi bruke tradisjonelle kontrollere til å håndtere logikken.

Rute :: få ('brukere / id', 'Brukere @ show');

Nå, Controllers / Users.php vil være ansvarlig for å gjengi visningen - spesielt vise fram metode.

med ('bruker', $ bruker); 

Enkel godkjenning

Nesten alle webapplikasjoner av substans vil kreve noen form for godkjenning. Laravel gir et enkelt, men lett å bruke grensesnitt for autentisering av brukere.

Begynn med å opprette en brukere bord med de nødvendige feltene for brukernavn og passord. Husk: Dette er et perfekt brukskasse for en migrering!

Laravel kan da forsøk for å logge inn en bruker - sannsynligvis basert på brukeroppførte verdier fra et skjema.

Her er et grunnleggende eksempel, minus valideringsaspektet.

Rute :: post ('innlogging', funksjon () $ credentials = array ('brukernavn' => Input :: get ('brukernavn'), 'passord' => Input :: få ('passord')); / / utfør validering hvis (Auth: forsøk ($ credentials)) // Referanser matcher. Logget inn! returnere Omdirigering :: til ('admin / profil'););

Merk at, bak kulissene, vil Laravel automatisk ha det oppgitte passordet, og sammenligne det med det som er lagret i brukere bord.

Forutsatt at brukerens legitimasjon samsvarer, blir bruker-IDen lagret i økten, og brukeren vil bli logget inn. På etterfølgende forespørsler kan du hente brukernavnet som er logget inn for øyeblikket med:

$ user = Auth :: user () -> brukernavn;

Sende e-post

Innrøm det: sende e-post gjennom søknaden din er alltid mer komplisert enn det burde være. Ikke lenger i Laravel 4!

Bygget på toppen av den populære SwiftMailer-pakken, finner du nå en ny config / mail.php filen i søknaden din. Her kan du angi de nødvendige legitimasjonene til e-postleverandøren din. Her er en avkortet versjon av hva du finner:

 'smtp.example.com', 'port' => 2525, 'fra' => array ('adresse' => null, 'navn' => null), 'encryption' => 'tls', 'brukernavn' = > null, 'passord' => null,);

Bare erstatt verdiene med de fra e-postserveren din, tilsvarende.

Deretter trenger vi en visning for e-posten. La oss lage en, kalt welcome.blade.php, som vil bli brukt når et nytt medlem registrerer seg for vår Justin Bieber-fanside.

  Hei der, $ user-> name. Takk igjen for å registrere deg for de siste Justin Bieber-nyhetene! Vi ser frem til å se deg rundt. Takk, ledelsen  

Med alt på plass, la oss sette opp den nødvendige eksempelluten, og send e-posten.

Rute :: få ('/', funksjon () $ user = Bruker :: finn (1); $ data = ['bruker' => $ bruker]; // e-postvisning, data for visning, nedleggelse for å sende epost Mail :: send ('e-post / velkomst', $ data, funksjon ($ melding) bruk ($ bruker) $ melding -> til ($ user-> email) -> emne ('Welcome Bieber Fan!') vedlegg ('images / bieberPhoto.jpg');); return 'Velkommen e-post sendt!';);

Ganske enkelt, eh? Vi tar tak i den nye brukeren fra bordet, og brann av en e-post til den brukerens tilhørende e-postadresse. Takket være SwiftMailer-funksjonaliteten, utfører tilsynelatende komplekse handlinger, for eksempel vedlegg av filer, en cinch! Nå mottar hvert nytt medlem et bilde av Justin Bieber ved registrering. Perfekt!


BFF med ryggrad

"Backbone gir struktur for din rotete spaghetti kode!"

Laravel 4 gjør prosessen med å lage RESTful APIer så enkelt som menneskelig mulig. Nøkkelen er hvordan JSON som standard returneres fra en rute.

La oss forestille oss at vi må returnere en liste over alle brukere som JSON. Vel, Chuck, vi kan oppnå det i en enkelt linje.

Rute :: få ('brukere', funksjon () retur bruker :: alle (););

Hvis du kjører denne ruten, vil en del JSON bli vist, for eksempel:

[ "Id": 1, "brukernavnet": "[email protected]",  "id": 2, "brukernavnet": "[email protected]"]

Lurer på hvor passord feltet er? I Laravel, innenfor tabellens tilhørende modell, kan vi spesifisere, via a $ skjult eiendom, hvilke felt som skal gjemme fra JSON-utgang.

Nå, med et JavaScript-bibliotek, som Backbone, kan vi hente disse dataene med letthet.

var Bruker = Backbone.Model.extend (); var UsersCollection = Backbone.Collection.extend (modell: bruker, url: '/ users'); var users = new UsersCollection; users.fetch (); users.toJSON (); // [Objekt, Objekt, Objekt]

Hva med å hente en enkelt bruker i stedet? Vel, vi må først sette opp riktig Laravel-rute:

Rute :: få ('brukere / id', funksjon ($ id) retur Bruker :: finn ($ id););

Som vi har lært, vil dette returnere JSON for den forespurte brukeren (minus passord). Deretter lager vi en ryggradsmodell, og henter dataene.

var Bruker = Backbone.Model.extend (urlRoot: '/ users'); var user = ny bruker (id: 1); user.fetch (); // id: 1, brukernavn: '[email protected]'

Legg merke til hvordan bruken av arbeidet er på klientsiden? Laravel-koden vår er like barebones som mulig.


Migrations

Hvis du er utelukkende en PHP-utvikler, er det sannsynlig at du ennå ikke har opplevd glede av migrasjoner, som først ble popularisert av Ruby on Rails-rammen.

Tenk på overføringer som versjonskontroll for databasen din. Hva ville skje hvis dagen etter at du la det nye feltet til din oppgaver bord, innså du at det ikke var nødvendig for tross alt. Vel, du fjerner manuelt feltet, ikke sant? Men hva med de andre utviklerne på laget ditt? Koden deres kan brytes hvis du ikke forteller dem!

Med flyttinger, ruller vi bare tilbake den forrige migrasjonen, og fortsetter med vår dag! Enda bedre, når du trykker på endringer på serveren din, er det enkelt php artisan migrere kommandoen vil automatisk oppdatere produksjonsdatabasen din. Når det kombineres med Laravel's Schema Builder, gjør dette prosessen med å administrere databaser så enkelt som mulig.

La oss lage en migrering for å legge til en ny brukere bord til vår database. Fra kommandolinjen:

php artisan migrasjon: lag create_users_table --table = users --create

I koden ovenfor angir vi navnet på tabellen, så vel som --skape flagg, for å angi at vi lager et nytt bord, i stedet for å endre en eksisterende.

Denne kommandoen vil opprette en ny migreringsfil i applikasjonen vår. Vi kan da utnytte Laravels Schema-klasse for å forberede tabellens skjema.

trinn ( 'id'); $ Bord-> streng ( 'tittel'); );  / ** * Omvendt migrasjonene. * / offentlig funksjon ned () Schema :: drop ('tasks'); 

Legg merke til hvordan denne klassen har to metoder: opp og ned, som angir hvilken handling Laravel burde ta når du foretar en migrering, samt å rulle den tilbake.

I dette tilfellet, på opp(), Vi lager et nytt bord, oppgaver, og angi to felt for id og tittel av oppgaven, henholdsvis. Når vi ruller tilbake overføringen, slipper vi bare bordet.

Kjør overføringen ved å gå tilbake til Terminal og skrive:

php artisan migrere

Det er det! Du har nå en helt ny oppgaver bord med to felt! ... Uh oh, må du rulle den tilbake? Enkel:

php artisan migrere: rollback

Ha det oppgaver bord.


Blad

Laravel's Blade Templating Engine gir en ren syntaks for visninger. For eksempel, med vanlig PHP, å filtrere gjennom en liste over mennesker og ekko deres respektive navn innenfor et listepunkt, kan vi skrive:

Denne syntaksen kan brukes på de fleste av PHPs kontrollstrukturer.

Det er ikke så ille, men vi kan gjøre det bedre. Enhver Laravel-visning som inneholder .blade.php filutvidelsen vil bli analysert, tilsvarende. Som et resultat kan den forrige koden erstattes med:

    @foreach ($ folk som $ p)
  • $ p
  • @endforeach

Legg merke til hvordan variabler som skal ekko er pakket inn i , ligner på hva du vil finne i en JavaScript-templerende motor, som håndtak.

Blader kan også brukes til elegante layouter og mastersider. La oss lage en base mastervisning for å demonstrere denne funksjonaliteten.

// visninger / layout.blade.php       
@yield ( 'beholder')

De @utbytte linjen er nøkkelen. Dette spesifiserer at et hvilket som helst barn viser med en seksjon id av container burde være nestet der.

La oss neste lage en ny visning.

// visninger / hjem / hello.blade.php @layout ('layout') @section ('container') 

Hei, $ user-> name!

@endsection

Ferdig! Enkle mester sider i PHP!


Ressursfulle kontrollører

Uten litt hjelp, kan det være litt vanskelig å lage en RESTful tjeneste i PHP. Vel, i Laravel 4, kunne det ikke vært enklere. Rammeverket tilbyr det vi refererer til som Restful Resources. La oss teste det ut.

Innenfor din ruter fil, spesifiser en ny ressurs.

Rute :: ressurs ('oppgaver', 'TasksController');

Denne koden angir at vi vil opprette en ny ressurs, oppgaver, og plasser TasksController kontrollansvarlig for å håndtere logikken for hver rute.

Når du følger REST-prinsippene, registrerer denne ressursen automatisk ruter for:

  • GET-oppgaver (Vis alle oppgaver)
  • GET-oppgaver / id (Vis enkelt oppgave)
  • Få oppgaver / opprett (Vis skjema for å opprette en ny oppgave)
  • POST-oppgaver (Opprett en ny oppgave)
  • GET oppgave / id / edit (Rediger enkelt oppgave)
  • PUT oppgaver / id (Oppdateringsoppgave)
  • SLETT oppgaver / id (Slett oppgave)

Neste, la oss lage det TasksController, men i stedet for å gjøre det manuelt, lar vi Artisan håndtere kjeleplaten.

php artisan controller: gjør TasksController

Dette vil skape en ny styringer / TasksController.php kontrolleren, og fyll den med litt kjele.

 

Hver av disse metodene vil bli utløst når den aktuelle RESTful-ruten utløses. Så, for å vise et skjema for å opprette en ny oppgave, vi ville laste den aktuelle visningen i skape metode som vil bli utløst når example.com/tasks/create er forespurt. Det skjemaet skulle POST til / oppgaver, i hvilket tilfelle butikk Metoden vil bli utløst.

Det kan ikke være renere!

Se UserScape's Vimeo-side for de nyeste offisielle Laravel-skjermbildene


Database sådd

Hvor mange ganger har du funnet deg manuelt å "seed" en databasetabell med dummyoppføringer, med tanke på testing? For meg, vel, det er et stort antall! Laravel 4 lar oss spesifisere en frø filen for et bord.

For å prøve det, opprett en ny fil med samme navn som det tilhørende tabellen i app / database / frø katalog over søknaden din. Denne filen skal lagre en rekke arrays, som hver inneholder de nødvendige nøkkelverdier-parene. Her er et eksempel:

 'Gå til butikken'] ['title' => 'Fullfør Laravel artikkel'] ['title' => 'Plukk opp egg.' ]]);

Vi har nå beskrevet tre nye rader for oppgaver bord i vår database. La oss frø det.

php artisan db: frø

Ferdig!


Modell Setters og Getters

Det er sannsynligvis en rekke handlinger som du ofte utløser når du setter inn eller får et felt fra en databasetabell. For eksempel, når en bruker registrerer, for å følge sikkerhetspraksis, bør vi alltid ha sitt passord. I stedet for å gjøre arbeidet manuelt, la oss istedenfor oppdatere Bruker modell, og angi at det ved førstegangsinnstilling skal først settes inn.

passord ); 

Lett! Nå trenger vi aldri å bekymre deg for det stykket av puslespillet, når du registrerer en ny bruker. Naturligvis er omvendt alternativ også tilgjengelig, hvis du trenger å behandle et felts verdi før du får det.

Hva om vi trenger å prettify et tidsstempel eller navn? Dette kan også oppnås gjennom modellen, hvis du ønsker det.

firstName. ". $ this-> lastName;

Dette nye fullt navn() Metoden vil nå være tilgjengelig for brukerens forekomst.

ekko Bruker :: finn (1) -> fullName (); // John Doe

Fellesskap (konferanse)

Kanskje viktigere enn noe annet, har Laravel, i en relativt kort tidsperiode, samlet et blomstrende evangelisk samfunn, som består av noen av de mest innflytelsesrike utviklerne i PHP-fellesskapet.

Hvorfor er dette viktig? Enkelt: med evangelisering kommer både utdanning og bidrag. Den største hindringen for et nytt rammeverk er å få ordet og vise folk hvordan man bruker dang-ting! Heldigvis utmerker Laravel seg i dokumentasjon og opplæringsprogrammer / screencasts rundt på nettet - inkludert et fullstendig kurs av deg virkelig!

Lær inn og ut av Laravel her på Tuts + Premium!

Sannheten er at vi knapt har riper overflaten av det som er mulig i Laravel. Vi har ennå ikke dekket Laravels feilhåndtering, PHPUnit-integrasjon, ivrig lasting (før og etter henting av samlinger) og mye mer. Husk å referere til den fantastiske dokumentasjonen for å grave dypere inn i rammen, og hold øynene skli for den offisielle utgivelsen av Versjon 4!

Det populære Nettuts + samfunnet tilbyr en rekke Laravel-spesifikke opplæringsprogrammer.

Hvis denne artikkelen ser ut til å være drivkraften for din nyoppdagede kjærlighet til PHP og Laravel, kan du kanskje vurdere å delta på den første årlige Laracon (konferansen), planlagt i slutten av februar 2013, i Washington D.C. Kanskje jeg ser deg der!

Den første Larvik-konferansen, Laracon, vil bli avholdt i Washington DC den 22-23 februar 2013. Les mer på http://conference.laravel.com