Waarom Laravel de PHP-gemeenschap neemt door Storm

Ik moet toegeven: op een gegeven moment voelde ik een beetje een beetje op de PHP-taal. Een aantal aangrijpende artikelen met PHP-haat cirkelden rond het web als een virus en sommige van zijn vlaggenschipraamwerken, zoals CodeIgniter, werden snel oudbakken. Al die tijd leek Ruby on Rails de koploper te zijn in termen van innovatie en ontwikkelgemak. Naarmate de tijd verstreek, merkte ik dat ik steeds meer naar mijn Ruby toolbelt ging zoeken.

Maar toen ontdekte ik op een dag een nieuw, elegant kader, genaamd Laravel. Aanvankelijk wees ik het af als nog een andere Sinatra-kloon die snel in het niets zou verdwijnen, omdat de hoofdontwikkelaar het had verlaten. Maar toch, week in week uit, waren mijn feeds op het sociale netwerk in een stroomversnelling en prezen Laravel's leesbaarheid. "Zou het kunnen zijn," dacht ik bij mezelf, "dat PHP eindelijk een echt modern kader heeft?"

Meer informatie over Laravel op http://laravel.com

Ik was niet langer bereid om aan de zijlijn te gaan zitten; het was tijd om in te graven. Een jaar later, en ik ben een van de grootste evangelisten. Laravel maakt PHP opnieuw leuk! Sterker nog, ik geloof niet langer dat PHP voor altijd gedoemd is om voornamelijk persoonlijke sites en lelijke WordPress-blogs te zijn. Nee; in feite is het de mening van deze schrijver dat we, dankzij Laravel, Composer en PHP 5.5, de volgende renaissance van de meest populaire server-side taal van het web zullen ervaren.

Als u de nieuwste ontwikkelversie van Laravel (v4) wilt installeren, moet u eerst Composer installeren. Kopieer vervolgens de repo en installeer de afhankelijkheden. git clone git: //github.com/illuminate/app.git myApp en componist installeren. Je bent klaar om te gaan!


Welsprekend

De meeste PHP-ontwikkelaars beginnen hun reis door ontelbare SQL-regels direct in hun ijskoude, onleesbare PHP te nestelen. Onnodig te zeggen, met uitzondering van de meest elementaire websites, leidt dit al snel tot een onmogelijke puinhoop.

Weet je nog dat je voor het eerst over ActiveRecord van Ruby on Rails hoorde? Welnu, in het PHP-einde van de wereld is Eloquent de eerste implementatie.

Heb enkele voorbeelden nodig?

// Haal alle taken op $ tasks = Task :: all (); // Haal de taak op met een ID van 1 $ task = Task :: find (1); // Update een taak $ task = Task :: find (1); $ task-> title = 'Zet die cookie neer!'; $ Taak-> save (); // Maak een nieuwe taak aan Taak :: create (['title' => 'Write article']); // Een taak verwijderen Taak: find (1) -> delete ();

Mensen, het is niet mogelijk om meer leesbare code te schrijven in PHP! Nu zou het één ding zijn als Eloquent je alleen toestond om basis CRUD-bewerkingen op een tafel uit te voeren, maar dat is zeker niet het geval.

Overweeg tabelrelaties, zoals een gebruiker en zijn / haar respectieve taken. In Laravel kunnen we, na het instellen van een snelle opzoekmethode voor elk model, gemakkelijk een-op-een relatie of een andere associatie voor die kwestie aan. Hier zijn een paar voorbeelden om je eetlust te wekken.

// Verkrijg alle taken van de auteur met een id van 1 $ tasks = User :: find (1) -> tasks; // Haal de auteur van een taak $ author = Task :: find (5) -> user () -> username; // Voeg een nieuwe taak in door de auteur $ task = new Task ([title: 'Go to store.']); Gebruikers :: find (1) -> taken () -> invoegen ($ taak);

Het is geen reden om Eloquent te beschouwen als de beste ActiveRecord-implementatie in de PHP-taal.


Composer-pakketten

Composer installeren.

Beginnend met Laravel 4 (momenteel in Alpha), zal het gehele framework worden gemodulariseerd en beschikbaar als individuele Composer-pakketten.

Composer is een verpakkingssysteem voor PHP dat vergelijkbaar is met PEAR, maar dan beter. Het maakt het proces van afhankelijkheidsmanagement zo eenvoudig mogelijk.

Denk aan het bestaande framework-ecosysteem. Op dit moment word je gedwongen om te leven met de kernfuncties van elk framework. Je kunt er niet voor kiezen om Eloquent in een CakePHP-toepassing te gebruiken. Zoals je je kunt voorstellen, heeft deze waarheid geleid tot een krankzinnig proces waarbij het wiel telkens opnieuw en opnieuw wordt uitgevonden.

Dames en heren, de toekomst van PHP is modulair. Waarom zou je een opgeblazen massief kader installeren als je maar een paar van zijn aanbiedingen nodig hebt? Welnu, binnenkort zal dat niet meer gebeuren. Eloquent alleen nodig hebben in een eenvoudig project? Prima - helemaal geen probleem! Installeer het eenvoudig via Composer en ga verder!

Dus, als we naar een meer pakket-gebaseerde, modulaire PHP-wereld verhuizen, hoe past Laravel dan in? Beschouw het als een vooraf bepaalde verzameling pakketten, verpakt in een boog! Sterker nog, als u moet updaten naar de nieuwste versie van het framework, is het net zo eenvoudig als hardlopen update van de componist.

Laten we als voorbeeld van de flexibiliteit die dit biedt, de populaire Mockery-testbibliotheek toevoegen aan een Laravel-toepassing. Begin met een nieuw Laravel 4-project en bewerk het composer.json bestand om Mockery te vereisen.

"require": "illuminate / foundation": "> = 1.0.0", "mockery / mockery": "dev-master", "autoload": "classmap": ["app / controllers", " app / modellen "," app / database / migraties "," app / tests / TestCase.php "]

Raadpleeg Packagist.org voor een lijst met beschikbare Composer-pakketten, evenals installatie-instructies.

Nu we Composer hebben laten weten dat onze toepassing Spot nodig heeft, kunnen we de toepasselijke afhankelijkheden installeren.

update van de componist

En dat is het! We kunnen nu Mockery gebruiken in onze tests. Dit is de kracht van Composer en Laravel 4 op het werk! We hebben wielen; laten we stoppen met het maken van nieuwe! Honderden honderden pakketten zijn beschikbaar via Packagist.org.

   

Honderden honderden pakketten zijn beschikbaar via Packagist.org.


routes

De meeste beginnende PHP-ontwikkelaars zijn niet bekend met iets anders dan de meest natuurlijke routesystemen. Maak een directorystructuur die overeenkomt met de gewenste URI en ga verder. Voeg bijvoorbeeld een toe index.php bestand naar de volgende map: blog / admin /, en nu kunt u het openen door te bladeren naar: localhost: 8888 / blog / admin / index.php. Gemakkelijk! Nou, misschien in het begin; maar u zult waarschijnlijk merken dat u meer flexibiliteit en controle nodig heeft over welke route in uw toepassing wordt geactiveerd.

Laravel neemt een ongelooflijk eenvoudige en gemakkelijk te gebruiken benadering van routering. Laten we als voorbeeld de benodigde route schrijven om een ​​weergave voor het profiel van een gebruiker weer te geven.

Route :: get ('users / id', function ($ id) // vind de user $ user = User :: find ($ id); // display view, en pass user object return Bekijk: make ('users.profile') -> met ('user', $ user););

Nu, wanneer een gebruiker vraagt example.com/users/1, de gebruikers / profile.php weergave wordt weergegeven.

Als alternatief kunnen we traditionele controllers gebruiken om de logica te verwerken.

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

Nu, Controllers / Users.php zal verantwoordelijk zijn voor het weergeven van het beeld, met name het laten zien methode.

met ('gebruiker', $ gebruiker); 

Gemakkelijke authenticatie

Bijna elke webtoepassing van substantie zal enige vorm van authenticatie vereisen. Laravel biedt een eenvoudige, maar eenvoudig te gebruiken interface voor authenticatie van gebruikers.

Begin met het maken van een gebruikers tabel met de nodige velden voor de gebruikersnaam en wachtwoord. Let op: dit is een perfecte use-case voor een migratie!

Laravel kan dan poging om een ​​gebruiker aan te melden - waarschijnlijk gebaseerd op door de gebruiker geleverde waarden van een formulier.

Hier is een eenvoudig voorbeeld, minus het validatieaspect.

Route :: post ('login', function () $ credentials = array ('gebruikersnaam' => Input :: get ('gebruikersnaam'), 'wachtwoord' => Input :: get ('wachtwoord')); / / voer validatie uit als (Auth :: poging ($ inloggegevens)) // Inloggegevens overeenkomen met ingelogd! return Redirect :: to ('admin / profile'););

Merk op dat, achter de schermen, Laravel automatisch het opgegeven wachtwoord hasht en vergelijkt met wat is opgeslagen in de gebruikers tafel.

Ervan uitgaande dat de inloggegevens van de gebruiker overeenkomen, wordt de gebruikers-ID opgeslagen in de sessie en wordt de gebruiker aangemeld. Bij volgende aanvragen kunt u de gebruikersnaam van de momenteel aangemelde gebruiker ophalen met:

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

Email verzenden

Geef toe: het verzenden van e-mail via uw applicatie is altijd ingewikkelder dan het zou moeten zijn. Niet meer in Laravel 4!

Gebouwd bovenop het populaire SwiftMailer-pakket, vindt u nu een nieuw config / mail.php bestand in uw applicatie. Hier kunt u de benodigde inloggegevens voor uw e-mailprovider opgeven. Hier is een uitgeklede versie van wat u zult vinden:

 'smtp.example.com', 'port' => 2525, 'from' => array ('address' => null, 'name' => null), 'encryption' => 'tls', 'username' = > null, 'wachtwoord' => null,);

Vervang eenvoudig de waarden door die van uw e-mailserver.

Vervolgens hebben we een weergave voor de e-mail nodig. Laten we er een maken, genaamd welcome.blade.php, die wordt gebruikt wanneer een nieuw lid zich registreert voor onze Justin Bieber-fansite.

  Hallo daar, $ user-> naam. Nogmaals bedankt voor het aanmelden voor het laatste Justin Bieber-nieuws! We zien er naar uit om je weer te zien. Bedankt, management  

Laten we met alles op zijn plaats de benodigde voorbeeldroute instellen en de e-mail verzenden.

Route :: get ('/', function () $ user = User :: find (1); $ data = ['user' => $ user]; // e-mailweergave, gegevens voor weergave, afsluiting om e-mail te verzenden Mail :: verzenden ('e-mails / welkom', $ gegevens, functie ($ bericht) gebruiken ($ gebruiker) $ bericht -> naar ($ gebruiker-> e-mail) -> onderwerp ('Welkom Bieber Fan!') -> attach ('images / bieberPhoto.jpg');); return 'Welcome email sent!';);

Best simpel, toch? We pakken de nieuwe gebruiker van de tafel en vuren een e-mail af naar het bijbehorende e-mailadres van die gebruiker. Dankzij de SwiftMailer-functionaliteit is het een makkie om schijnbaar complexe acties, zoals het bijvoegen van bestanden, uit te voeren! Nu ontvangt elk nieuw lid een foto van Justin Bieber wanneer hij zich aanmeldt. Perfect!


BFF's met ruggengraat

"Backbone biedt structuur voor je rommelige spaghetti-code!"

Laravel 4 maakt het proces om RESTful API's te maken zo eenvoudig als menselijk mogelijk is. De sleutel bevindt zich in de manier waarop JSON standaard wordt geretourneerd vanaf een route.

Laten we ons voorstellen dat we een lijst met alle gebruikers als JSON moeten retourneren. Nou, Chuck, we kunnen dat in één regel volbrengen.

Route :: get ('users', function () return User :: all (););

Als u deze route uitvoert, wordt een beetje JSON weergegeven, zoals:

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

Vraagt ​​u zich af waar het wachtwoord veld is? In Laravel, binnen het bijbehorende model van de tabel, kunnen we specificeren, via een $ verborgen eigenschap, welke velden moeten worden verborgen voor JSON-uitvoer.

Nu, met een JavaScript-bibliotheek, zoals Backbone, kunnen we deze gegevens gemakkelijk ophalen.

var Gebruiker = Backbone.Model.extend (); var UsersCollection = Backbone.Collection.extend (model: Gebruiker, url: '/ users'); var users = new UsersCollection; users.fetch (); users.toJSON (); // [Object, Object, Object]

Hoe zit het met het ophalen van een enkele gebruiker in plaats daarvan? Nou, we zouden eerst de juiste Laravel-route moeten instellen:

Route :: get ('users / id', function ($ id) return User :: find ($ id););

Zoals we hebben geleerd, retourneert dit de JSON voor de gevraagde gebruiker (minus de wachtwoord). Vervolgens maken we een Backbone-model en halen we de gegevens op.

var Gebruiker = Backbone.Model.extend (urlRoot: '/ users'); var user = new User (id: 1); user.fetch (); // id: 1, gebruikersnaam: '[email protected]'

Merk op hoe de dupe van het werk aan de client-kant is? Onze Laravel-code is zo barebones mogelijk.


migraties

Als je uitsluitend PHP-ontwikkelaar bent, heb je waarschijnlijk nog niet het plezier van migraties ervaren, dat eerst werd gepopulariseerd door het Ruby on Rails-framework.

Denk aan migraties als versiebeheer voor uw database. Wat zou er gebeuren als, de dag nadat je dat nieuwe veld aan je hebt toegevoegd taken tafel, je realiseerde je dat het toch niet nodig was. Nou, je zou het veld handmatig verwijderen, toch? Maar hoe zit het met de andere ontwikkelaars in uw team? Hun code kan breken als je ze niet vertelt!

Met migraties keren we echter alleen de vorige migratie terug en gaan we verder met onze dag! Nog beter, wanneer je wijzigingen naar je server pusht, is dat een simpele php artisan migreren commando zal uw productiedatabase automatisch updaten. In combinatie met Laravel's Schema Builder maakt dit het proces van het beheren van databases zo eenvoudig mogelijk.

Laten we een migratie maken om een ​​nieuwe toe te voegen gebruikers tabel naar onze database. Vanaf de opdrachtregel:

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

In het bovenstaande fragment geven we de naam van de tabel op, evenals de --creëren vlag, om aan te geven dat we een nieuwe tabel maken in plaats van een bestaande te wijzigen.

Met deze opdracht maakt u een nieuw migratiebestand binnen onze applicatie. We kunnen dan de Schema-klasse van Laravel gebruiken om het schema van onze tabel voor te bereiden.

verhogingen ( 'id'); $ Tafel-> string ( 'title'); );  / ** * Keer de migraties terug. * / public function down () Schema :: drop ('tasks'); 

Merk op hoe deze klasse twee methoden biedt: omhoog en naar beneden, welke specificeren welke actie Laravel zou moeten ondernemen bij het uitvoeren van een migratie, evenals het terugdraaien ervan.

In dit geval, op up (), we maken een nieuwe tabel, taken, en geef twee velden op voor de ID kaart en titel van de taak, respectievelijk. Bij het terugdraaien van de migratie laten we de tafel gewoon vallen.

Voer de migratie uit door terug te keren naar de terminal en te typen:

php artisan migreren

Dat is het! Je hebt nu een gloednieuw taken tafel met twee velden! ... oh oh, moet je het terugdraaien? Eenvoudig:

php artisan migrate: rollback

Vaarwel taken tafel.


Blad

Laravel's Blade templating-engine biedt een schone syntaxis voor weergaven. Als u bijvoorbeeld PHP gebruikt om door een lijst met mensen te bladeren en hun respectievelijke namen binnen een lijstitem te echoën, schrijven we mogelijk:

Deze syntaxis kan worden toegepast op de meeste besturingsstructuren van PHP.

Dat is niet zo erg, maar we kunnen het beter doen. Elke Laravel-weergave met de .blade.php bestandsextensie zal overeenkomstig worden geparseerd. Als gevolg hiervan kan het vorige fragment worden vervangen door:

    @foreach ($ people as $ p)
  • $ p
  • @endforeach

Merk op hoe variabelen die moeten worden geëchood binnen zijn ingepakt , vergelijkbaar met wat je zou vinden in een JavaScript-engine, zoals Handlebars.

Blade kan ook worden gebruikt voor elegante lay-outs en hoofdpagina's. Laten we een basisoverzicht maken om deze functionaliteit te demonstreren.

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

De @opbrengst lijn is de sleutel. Dit geeft aan dat elk kind met een sectie bekijkt ID kaart van houder moet daar worden genest.

Laten we vervolgens een nieuwe weergave maken.

// views / home / hello.blade.php @layout ('layout') @section ('container') 

Hallo, $ user-> naam!

@endsection

Gedaan! Gemakkelijke hoofdpagina's in PHP!


Vindingrijke controllers

Zonder een beetje hulp, kan het creëren van een RESTful service in PHP nogal lastig zijn. Welnu, in Laravel 4 zou het niet eenvoudiger kunnen zijn. Het raamwerk biedt wat we Restful Resources noemen. Laten we het uittesten.

In jouw routes bestand, specificeer een nieuwe bron.

Route :: resource ('tasks', 'TasksController');

Deze coderegel geeft aan dat we een nieuwe bron willen maken, taken, en plaats de TasksController controller die verantwoordelijk is voor het afhandelen van de logica voor elke route.

Bij het volgen van de principes van REST registreert deze resource automatisch routes voor:

  • GET taken (Toon alle taken)
  • GET tasks / id (Toon enkele taak)
  • GET tasks / create (Formulier weergeven om een ​​nieuwe taak aan te maken)
  • POST-taken (een nieuwe taak maken)
  • GET task / id / edit (bewerk enkele taak)
  • PUT-taken / id (taak bijwerken)
  • DELETE tasks / id (taak verwijderen)

Laten we dat vervolgens maken TasksController, maar in plaats van het handmatig te doen, laten we Artisan de boilerplate afhandelen.

php artisan controller: maak TasksController

Hiermee wordt een nieuw gemaakt controllers / TasksController.php controller, en vul het met een beetje boilerplate.

 

Elk van deze methoden wordt geactiveerd wanneer de van toepassing zijnde RESTful-route wordt geactiveerd. Dus, om een ​​formulier weer te geven om een ​​nieuw te maken taak, we zouden de toepasselijke weergave laden binnen de creëren methode, die wordt geactiveerd wanneer example.com/tasks/create is verzocht. Dat formulier moet POST naar / taken, in welk geval de op te slaan methode zal worden geactiveerd.

Het kan niet schoner zijn!

Raadpleeg de Vimeo-pagina van UserScape voor de laatste officiële screenshots van Laravel


Databasekweek

Hoe vaak heb je gemerkt dat je handmatig een databasetabel met dummyrecords "uitzaait" om te testen? Voor mij is het een groot aantal! Laravel 4 stelt ons in staat om een zaad bestand voor een tafel.

Om het uit te proberen, maakt u een nieuw bestand met dezelfde naam als de bijbehorende tabel in de app / databank / zaden directory van uw applicatie. Dit bestand zou een array van arrays moeten opslaan, die elk de nodige sleutel / waarde-paren bevatten. Hier is een voorbeeld:

 'Ga naar de winkel'] ['title' => 'Finish Laravel article'] ['title' => 'Raap eieren op.' ]]);

We hebben nu drie nieuwe rijen beschreven voor de taken tabel in onze database. Laten we het zaaien.

php artisan db: zaad

Gedaan!


Model Setters and Getters

Er is waarschijnlijk een aantal verschillende acties die u vaak uitvoert wanneer u een veld instelt of een veld uit een databasetabel gebruikt. Wanneer een gebruiker bijvoorbeeld registreert, om de beste beveiligingsmethoden te volgen, moeten we altijd zijn wachtwoord hashen. In plaats van het werk handmatig te doen, laten we het in plaats daarvan bijwerken Gebruiker model en specificeer dat, bij het instellen van een wachtwoord, deze eerst gehashed moet worden.

wachtwoord); 

Gemakkelijk! Nu hoeven we ons nooit zorgen te maken over dat stukje van de puzzel, wanneer we een nieuwe gebruiker registreren. Natuurlijk is de omgekeerde optie ook beschikbaar, mocht u de waarde van een veld eerst moeten verwerken voordat u hem "krijgt".

Wat als we een tijdstempel of naam mooier moeten maken? Dit kan ook worden bereikt door het model, als u dat wenst.

firstName. ". $ this-> lastName;

Deze nieuwe voor-en achternaam() methode zal nu beschikbaar zijn voor onze gebruikersinstantie.

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

Gemeenschap (conferentie)

Misschien belangrijker dan al het andere, Laravel heeft in een relatief korte tijdspanne een bloeiende, evangelische gemeenschap vergaard, die is samengesteld uit een aantal van de meest invloedrijke ontwikkelaars in de PHP-gemeenschap.

Waarom is dit belangrijk? Simpel: met evangelisatie komt zowel onderwijs als bijdrage. De grootste hindernis voor een nieuw raamwerk is om het bekend te maken en mensen te laten zien hoe ze het ding moeten gebruiken! Gelukkig blinkt Laravel uit in documentatie en tutorials / screencasts op het web, waaronder een volledige cursus van de jouwe!

Leer de ins en outs van Laravel hier bij Tuts + Premium!

De waarheid is dat we nauwelijks het oppervlak hebben bekrast van wat mogelijk is in Laravel. We moeten Laravel's foutafhandeling, PHPUnit-integratie, gretige laden (voor en na het ophalen van collecties) nog behandelen en nog veel meer. Zorg ervoor dat je de fantastische documentatie raadpleegt om dieper in het raamwerk te graven en houd je ogen open voor de officiële release van versie 4!

De populaire Nettuts + community biedt een aantal Laravel-specifieke tutorials.

Als dit artikel de aanzet vormde voor je nieuw gevonden liefde voor PHP en Laravel, kun je misschien overwegen om de eerste jaarlijkse Laracon (conferentie) bij te wonen, gepland voor eind februari 2013 in Washington D.C. Misschien zie ik je daar!

De allereerste Laravel-conferentie, Laracon, zal worden gehouden in Washington D.C. op 22-23 februari 2013. Meer informatie op http://conference.laravel.com