Varför Laravel tar PHP-gemenskapen med storm

Jag måste erkänna: På en punkt kände jag mig lite lite på PHP-språket. Ett antal gripande PHP-hatartiklar cirklade på webben som ett virus, och några av dess flaggskeppsramar, som CodeIgniter, växte snabbt inaktuellt. Under tiden tycktes Ruby on Rails vara ledande förpackningen, vad gäller innovation och enkel utveckling. När tiden gick på, fann jag mig själv att nå min Ruby verktygsbälte mer och mer.

Men då upptäckte jag en dag en ny elegant ram kallad Laravel. Först avsked jag det som en annan Sinatra klon som snabbt skulle minska till ingenting, som ledande utvecklare övergav det. Men fortfarande, vecka efter vecka, var mina sociala nätverksflöden i skymt och prisade Laravels läsbarhet. "Kan det vara," tänkte jag själv, "att PHP äntligen har en verkligt modern ram?"

Läs mer om Laravel på http://laravel.com

Jag var inte längre villig att sitta i sidled; Det var dags att gräva in. Ett år senare, och jag är en av sina största evangelister. Laravel gör faktiskt PHP kul igen! Ännu bättre tror jag inte längre att PHP för alltid är dömt till mestadels personliga webbplatser och fula WordPress-bloggar. Nej; Det är faktiskt den här författarens tro på att tack vare Laravel, Composer och PHP 5.5, är vi på väg att uppleva nästa renässans av webens mest populära serversida.

För att installera den senaste utvecklingsversionen av Laravel (v4) måste du först installera Kompositör. Sedan klonar du enkelt repo och installerar beroenden. git klon git: //github.com/illuminate/app.git myApp och kompositör installera. Du är redo att gå!


Vältalig

De flesta PHP-utvecklare börjar sin resa genom att näsa otaliga rader av SQL direkt i deras fria, oläsliga PHP. Det är självklart att, med undantag för de mest grundläggande webbplatser, leder detta snabbt till en oförlåtlig röra.

Kom ihåg när du först hörde om Ruby on Rails 'ActiveRecord? Tja, i PHP-slutet av världen är Eloquent det främsta genomförandet.

Behöver några exempel?

// Hämta alla uppgifter $ tasks = Uppgift :: alla (); // Hämta uppgiften med ett ID på 1 $ task = Uppgift :: hitta (1); // Uppdatera en uppgift $ task = Uppgift :: hitta (1); $ task-> title = 'Lägg den cookien ner!'; $ Uppgifts-> Spara (); // Skapa en ny uppgift Uppgift :: skapa (['title' => 'Skriv artikel']); // Ta bort en uppgift Uppgift :: hitta (1) -> ta bort ();

Folk, det är inte möjligt att skriva mer läsbar kod i PHP! Nu skulle det vara en sak om Eloquent bara fick dig att utföra grundläggande CRUD-operationer på ett bord, men det är verkligen inte fallet.

Tänk på tabellrelationer, till exempel en användare och hans / hennes respektive uppgifter. I Laravel kan vi enkelt hantera ett-till-ett-förhållande, eller någon förening för den delen, efter att ha fastställt en snabb uppslagsmetod för varje modell. Här är några exempel för att få din aptit.

// Få alla uppgifter av författaren med ett ID på 1 $ tasks = User :: find (1) -> tasks; // Få författaren till en uppgift $ author = Uppgift :: hitta (5) -> användarnamn () -> användarnamn; // Infoga en ny uppgift av författaren $ task = ny uppgift ([title: 'Go to store.']); Användare :: hitta (1) -> uppgifter () -> Infoga ($ uppgift);

Det är inte en sträcka att överväga Eloquent att vara den bästa ActiveRecord-implementeringen på PHP-språket.


Kompositörspaket

Installera kompositör.

Från och med Laravel 4 (för närvarande i Alpha) kommer hela ramverket att moduleras och bli tillgängligt som enskilda Kompositörspaket.

Kompositör är ett förpackningssystem för PHP som liknar PEAR, men bättre. Det gör processen för beredskapsförvaltning så lätt som möjligt.

Tänk på det befintliga rammekosystemet. Just nu är du tvungen att leva med varje rams kärnsätt med funktioner. Du kan inte välja att säga, använd Eloquent i en CakePHP-applikation. Som du kan föreställa dig, har denna sanning ledt till en galen process att återuppfinna hjulet om och om igen ... och över.

Damer och herrar, framtiden för PHP är en modulär. Varför installera en uppblåst, massiv ram, när du bara behöver några av sina erbjudanden? Nå, snart behöver du inte. Behöver bara Eloquent i ett enkelt projekt? Bra - inget problem alls! Installera det helt enkelt via Kompositör och fortsätt!

Så, om vi flyttar till en mer paketbaserad, modulär PHP-värld, hur passar Laravel in? Tja om det som en förutbestämd samling av paket, insvept i en båge! Ännu bättre, om du behöver uppdatera till den senaste versionen av ramverket är det lika enkelt som att springa kompositör uppdatering.

Som ett exempel på den flexibilitet som detta ger, lägger vi till det populära Mockery-testbiblioteket i en Laravel-applikation. Börja med ett nytt Laravel 4-projekt och redigera dess composer.json fil att kräva Mockery.

"illuminera": "belysa / grunda": "> = 1.0.0", "hån / mockery": "dev-master", "autoload": "klasskarta" app / modeller "," app / databas / migreringar "," app / test / TestCase.php "]

Se Packagist.org för en lista över tillgängliga Kompositörspaket samt installationsanvisningar.

Nu när vi har informerat Composer om att vår ansökan kräver Mockery, kan vi installera tillämpliga beroenden.

kompositör uppdatering

Och det är allt! Vi kan nu använda Mockery inom våra test. Detta är kraften hos Composer och Laravel 4 på jobbet! Vi har hjul; låt oss sluta skapa nya! Hundratals hundratals paket finns tillgängliga via Packagist.org.

   

Hundratals hundratals paket finns tillgängliga via Packagist.org.


rutter

De flesta början PHP-utvecklare är inte bekanta med något annat än det mest naturliga av ruttsystem. Skapa ett katalogtree för att matcha önskad URI och fortsätt. Till exempel lägg till en index.php fil till följande katalog: blog / admin /, och nu kan du komma åt det genom att bläddra till: localhost: 8888 / blog / admin / index.php. Lätt! Tja, kanske först men du kommer troligen att finna att du behöver mer flexibilitet och kontroll över vilken rutt som utlöses i din ansökan.

Laravel tar en otroligt enkel och lättanvänd metod för routing. Till exempel, låt oss skriva den nödvändiga rutten för att visa en vy för en användares profil.

Rutt :: get ('users / id', funktion ($ id) // hitta användaren $ user = Användare :: hitta ($ id); // visningsvy och skicka tillbaka användarobjekt Visa :: göra ('users.profile') -> med ('användare', $ användare););

Nu när en användare begär example.com/users/1, de användare / profile.php vyn kommer att göras.

Alternativt kan vi använda traditionella controllers för att istället hantera logiken.

Rutt :: get ('users / id', 'Users @ show');

Nu, Controllers / Users.php kommer att ansvara för att visa vyn - specifikt show metod.

med ("användare", $ användare); 

Enkel autentisering

Nästan alla webbansökningar av ämnet kommer att kräva någon form av autentisering. Laravel ger ett enkelt men lättanvänt gränssnitt för autentisering av användare.

Börja med att skapa en användare bord med nödvändiga fält för Användarnamn och Lösenord. Kom ihåg: det här är ett perfekt användningsfall för migrering!

Laravel kan då försök att logga in på en användare - antagligen baserat på användarvärden från ett formulär.

Här är ett grundläggande exempel, minus valideringsaspekten.

Rutt :: post ("inloggning", funktion () $ credentials = array ('användarnamn' => Input :: get ('användarnamn'), 'lösenord' => Ingång :: få ('lösenord')); / utföra validering om (Auth :: försök ($ credentials)) // Referenser matchar. Logga in! returnera Omdirigera :: till ('admin / profil'););

Observera att Laravel automatiskt bakom kulisserna kommer att ha det angivna lösenordet automatiskt och jämföra det med vad som lagras i användare tabell.

Om du antar att användarens referenser matchar, kommer användarnamnet att sparas i sessionen och användaren kommer inloggad. Vid efterföljande förfrågningar kan du få tag i användarnamnet som är inloggad för användaren med:

$ user = Auth :: user () -> användarnamn;

Skickar e-post

Godkänn det: Skicka e-post via din ansökan är alltid mer komplicerat än det borde vara. Inte längre i Laravel 4!

Byggd ovanpå det populära SwiftMailer-paketet, hittar du nu en ny config / mail.php filen i din ansökan. Här kan du ange nödvändiga referenser till din e-postleverantör. Här är en avvecklad version av vad du hittar:

 'smtp.example.com', 'port' => 2525, 'från' => array ('adress' => null, 'namn' => null), 'kryptering' => 'tls', 'användarnamn' = > null, 'password' => null,);

Byt bara ut värdena med de från din e-postserver, i enlighet med detta.

Därefter behöver vi en vy för e-postmeddelandet. Låt oss skapa en, kallad welcome.blade.php, som kommer att användas när en ny medlem registrerar sig på vår Justin Bieber-fans webbplats.

  Hej där, $ user-> name. Tack igen för att anmäla dig till de senaste Justin Bieber-nyheterna! Vi ser fram emot att träffa dig. Tack, ledningen  

Med allt på plats, låt oss konfigurera den nödvändiga exempelleden och skicka e-postmeddelandet.

Rutt :: få ('/', funktion () $ user = Användare :: hitta (1); $ data = ['user' => $ användare]; // e-postvy, data för visning, stängning för att skicka e-post Mail :: skicka ('email / welcome', $ data, funktion ($ message) använd ($ användare) $ message -> till ($ user-> email) -> subject ('Välkommen Bieber Fan!') bifoga ('images / bieberPhoto.jpg');); returnera 'Välkommen email skickat!';);

Ganska enkelt, va? Vi tar tag i den nya användaren från bordet och avbröt ett mail till den användarens tillhörande e-postadress. Tack vare SwiftMailer-funktionaliteten är det att spela ut till synes komplexa handlingar, till exempel bifogade filer, en film! Nu får varje ny medlem ett foto av Justin Bieber vid anmälan. Perfekt!


BFFs med ryggraden

"Ryggrad ger struktur för din röra spaghetti kod!"

Laravel 4 gör processen för att skapa RESTful API så enkelt som mänskligt möjligt. Nyckeln är hur JSON som standard kommer att returneras från en rutt.

Låt oss föreställa oss att vi måste returnera en lista över alla användare som JSON. Jo, Chuck, vi kan uppnå det i en enda rad.

Rutt :: få ('användare', funktion () returanvändare :: alla (););

Om du kör denna rutt visas lite JSON, till exempel:

[ "Id": 1, "användarnamn": "[email protected]",  "id": 2, "användarnamn": "[email protected]"]

Undrar var Lösenord fältet är? I Laravel, inom tabellens associerade modell, kan vi ange, via a $ dolda egenskap, vilka fält att gömma från JSON-utgången.

Nu, med ett JavaScript-bibliotek, som Backbone, kan vi hämta dessa data med lätthet.

var User = Backbone.Model.extend (); var UsersCollection = Backbone.Collection.extend (modell: Användare, URL: '/ användare'); var users = new UsersCollection; users.fetch (); users.toJSON (); // [Objekt, Objekt, Objekt]

Vad sägs om att hämta en enda användare istället? Tja, vi skulle först behöva ställa in rätt Laravel-rutt:

Rutt :: få ('användare / id', funktion ($ id) returanvändare :: hitta ($ id););

Som vi har lärt oss kommer detta att returnera JSON för den begärda användaren (minus Lösenord). Därefter skapar vi en ryggradsmodell och hämtar data.

var User = Backbone.Model.extend (urlRoot: '/ users'); var användare = ny användare (id: 1); user.fetch (); // id: 1, användarnamn: '[email protected]'

Lägg märke till hur arbetets brunt är på klientsidan? Vår Laravel-kod är så enkel som möjligt.


migreringar

Om du exklusivt är en PHP-utvecklare är det troligt att du ännu inte har upplevt glädjen av migreringar, som först populerades av Ruby on Rails-ramarna.

Tänk på migreringar som versionskontroll för din databas. Vad skulle hända om dagen efter att du lagt till det nya fältet till din uppgifter bord, insåg du att det inte behövdes trots allt. Tja, du skulle manuellt ta bort fältet, eller hur? Men hur är det med de andra utvecklarna på ditt lag? Deras kod kan bryta om du inte säger till dem!

Med migreringar rullar vi bara tillbaka den tidigare migrationen och fortsätter med vår dag! Ännu bättre, när du trycker på ändringar på din server, är det enkelt php artisan migrera kommando kommer automatiskt att uppdatera din produktionsdatabas. När det kombineras med Laravels Schema Builder gör det här processen att hantera databaser så enkelt som möjligt.

Låt oss skapa en migrering för att lägga till en ny användare bord till vår databas. Från kommandoraden:

php artisan migration: skapa create_users_table --table = users --create

I biten ovan anger vi namnet på tabellen, såväl som --skapa flagga, för att ange att vi skapar ett nytt bord, istället för att ändra en befintlig.

Detta kommando kommer att skapa en ny migrationsfil i vår applikation. Vi kan sedan utnyttja Laravels Schema-klass för att förbereda vårt bords schema.

inkrement ( 'id'); $ Bords> string (titel "); );  / ** * Omvandla migrationerna. * / allmän funktion ner () Schema :: drop ('tasks'); 

Lägg märke till hur den här klassen erbjuder två metoder: upp och ner, som anger vilken åtgärd Laravel ska ta när man utför en migrering, liksom att rulla tillbaka den.

I det här fallet, på upp(), vi skapar ett nytt bord, uppgifter, och ange två fält för id och titel av uppgiften, respektive. När vi rullar tillbaka migreringen, slipper vi helt enkelt bordet.

Kör migreringen genom att återvända till terminalen och skriva:

php artisan migrera

Det är allt! Du har nu en helt ny uppgifter bord med två fält! ... Uh åh, måste du rulla tillbaka? Enkel:

php artisan migrera: rollback

Adjö uppgifter tabell.


Blad

Laravel's Blade Templating Engine ger en ren syntax för synpunkter. Till exempel, med vanlig PHP, att filtrera genom en lista med personer och echo deras respektive namn inom ett listobjekt, kan vi skriva:

Denna syntax kan tillämpas på de flesta av PHP: s kontrollstrukturer.

Det är inte så illa, men vi kan göra det bättre. Vilken Laravel-vy som innehåller .blade.php filtillägget kommer att analyseras i enlighet med detta. Som ett resultat kan det föregående stycket ersättas med:

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

Lägg märke till hur variabler som ska echoed är inslagna inom , liknar vad du skulle hitta i en JavaScript-templerande motor, som Handlebars.

Bladen kan också användas för eleganta layouter och mastersider. Låt oss skapa en basmastersvy för att visa denna funktion.

// visningar / layout.blade.php       
@yield ( 'container')

De @avkastning rad är nyckeln. Detta anger att alla barn ska se med en sektion id av behållare borde ligga där.

Låt oss nu skapa en ny vy.

// visningar / hem / hello.blade.php @layout ('layout') @section ('container') 

Hej, $ user-> name!

@endsection

Gjort! Enkla mastersidor i PHP!


Resursfulla Controllers

Utan lite hjälp kan det vara lite svårt att skapa en RESTful tjänst i PHP. Tja, i Laravel 4 kunde det inte vara enklare. Ramverket erbjuder vad vi kallar vilande resurser. Låt oss testa det.

Inom din rutter fil, ange en ny resurs.

Rutt :: resurs ('uppgifter', 'TasksController');

Den här koden anger att vi vill skapa en ny resurs, uppgifter, och placera TasksController controller som ansvarar för hanteringen av logiken för varje rutt.

När REST-principerna följs kommer denna resurs automatiskt att registrera rutter för:

  • GET-uppgifter (Visa alla uppgifter)
  • GET-uppgifter / id (Visa enskild uppgift)
  • GET-uppgifter / skapa (Visa formulär för att skapa en ny uppgift)
  • POST-uppgifter (Skapa en ny uppgift)
  • GET-uppgift / id / redigera (Redigera enstaka uppgift)
  • PUT-uppgifter / id (Uppdateringsuppgift)
  • DELETE-uppgifter / id (Ta bort uppgift)

Låt oss då skapa det TasksController, men istället för att göra det manuellt låter vi Artisan hantera pannan.

php artisan controller: gör TasksController

Detta kommer att skapa en ny controllers / TasksController.php kontrollenhet och fyll den med lite pannplatta.

 

Vart och ett av dessa metoder kommer att utlösas när den tillämpliga RESTful-rutten utlöses. Så, för att visa en blankett för att skapa en ny uppgift, vi skulle ladda den aktuella vyn i skapa metod som kommer att utlösas när example.com/tasks/create är önskad. Det formuläret ska POST till / uppgifter, i vilket fall Lagra Metoden kommer att utlösas.

Det kunde inte vara renare!

Se UserScape's Vimeo-sida för de senaste officiella Laravel-skärmdumpen


Databas sådd

Hur många gånger har du befunnit dig att manuellt "söka" en databastabell med dummyrekord, i syfte att testa? För mig, det är ett stort antal! Laravel 4 tillåter oss att ange a utsäde fil för en tabell.

För att prova det, skapa en ny fil med samma namn som dess respektive tabell inom app / databas / frön katalog över din ansökan. Den här filen ska lagra en uppsättning arrayer, var och en innehåller de nödvändiga nyckelvärdesparen. Här är ett exempel:

 'Gå till affären'] ['title' => 'Avsluta Laravelartikel'] ['title' => 'Plocka upp ägg.' ]]);

Vi har nu beskrivit tre nya rader för uppgifter bord i vår databas. Låt oss fröda det.

php artisan db: frö

Gjort!


Modell Setters och Getters

Det är troligt en mängd olika åtgärder som du ofta utlöser när du ställer in eller hämtar ett fält från en databas tabell. Till exempel, när en användare registrerar, för att följa säkerhetsmetoderna, bör vi alltid ha sitt lösenord. Snarare än att manuellt göra jobbet, låt oss istället uppdatera Användare modell och ange att den först bör vara hashed när du anger ett lösenord.

Lösenord ); 

Lätt! Nu behöver vi aldrig oroa oss för den delen av pusslet, när vi registrerar en ny användare. Naturligtvis är det omvända alternativet tillgängligt också, om du behöver bearbeta ett fält värde innan du får det.

Vad händer om vi behöver prettify ett tidstämpel eller namn? Detta kan också åstadkommas genom modellen, om du vill.

firstName. ". $ this-> lastName;

Den här nya fullständiga namn() Metoden kommer nu att vara tillgänglig för vår användarinstans.

echo User :: find (1) -> fullName (); // John Doe

Gemenskap (konferens)

Kanske viktigare än någonting annat har Laravel, i en relativt kort tidsperiod, samlat ett blomstrande evangeliskt samhälle, som består av några av de mest inflytelserika utvecklarna i PHP-gemenskapen.

Varför är detta viktigt? Enkelt: med evangelism kommer både utbildning och bidrag. Den största hindren för en ny ram är att få ordet och visa hur man använder dang-grejen! Lyckligtvis utmärker Laravel i dokumentation och handledning / screencasts runt om i webben - inklusive en hel kurs av din sanning!

Lär dig Laravels insatser och utställningar här på Tuts + Premium!

Sanningen är att vi knappt har repat på ytan av vad som är möjligt i Laravel. Vi har ännu inte täckt Laravels felhantering, PHPUnit-integration, ivrig lastning (före och efter hämtning av samlingar) och mycket mer. Var noga med att hänvisa till den fantastiska dokumentationen för att gräva djupare in i ramen, och håll ögonen öppna för den officiella versionen av Version 4!

Det populära Nettuts + -samhället erbjuder ett antal Laravel-specifika handledning.

Om den här artikeln fungerade som en drivkraft för din nyfunna kärlek till PHP och Laravel, kanske du överväger att delta i den första årliga Laracon-konferensen, som planeras i slutet av februari 2013, i Washington D.C. Jag ses kanske där!

Den första Larvikkonferensen, Laracon, kommer att hållas i Washington DC den 22-23 februari 2013. Läs mer på http://conference.laravel.com