De ce Laravel a luat Comunitatea PHP de Storm

Trebuie să recunosc: într-un moment, m-am simțit puțin în limba PHP. Un număr de articole de ură ucigașe din PHP păreau să circule pe Internet ca un virus, iar unele dintre cadrele sale emblematice, cum ar fi CodeIgniter, se înrăutățeau rapid. Cu toate acestea, Ruby on Rails părea să conducă pachetul, din punctul de vedere al inovării și al ușurinței dezvoltării. Odată cu trecerea timpului, m-am trezit tot mai mult pentru centura mea de instrumente Ruby.

Dar, într-o zi, am descoperit un cadru nou, elegant, numit Laravel. La început, l-am respins ca pe o altă clona Sinatra care s-ar diminua repede în nimic, pe măsură ce dezvoltatorul plumb a abandonat-o. Dar, totuși, săptămânal după o săptămână, feedurile mele de rețele sociale erau în plină răscoală, lăudând citirea lui Laravel. "Ar putea fi, am gândit eu," că PHP are în cele din urmă un cadru cu adevărat modern? "

Aflați mai multe despre Laravel la http://laravel.com

Nu mai aveam voie să stau pe margine; a fost timpul să sapă. Un an mai târziu, și eu sunt unul dintre cei mai mari evangheliști ai săi. Laravel face din nou distractiv PHP! Chiar mai bine, nu mai cred că PHP este pentru totdeauna condamnată la cele mai multe site-uri personale și bloguri urât WordPress. nope; de fapt, credem acest scriitor că, datorită lui Laravel, Composer și PHP 5.5, suntem pe cale să experimentăm următoarea renaștere a celei mai populare limbi de pe server.

Pentru a instala cea mai recentă versiune de dezvoltare a Laravel (v4), va trebui să instalați mai întâi Compozitor. Apoi, pur și simplu clona repo, și instalați dependențele. git clona git: //github.com/illuminate/app.git myApp și compozitorul instala. Ești gata să pleci!


Elocvent

Cei mai mulți dezvoltatori PHP își încep călătoria, introducând nenumărate linii de SQL direct în PHP frigid și necitit. În mod inutil să spunem, excluzând cele mai de bază site-uri web, acest lucru conduce rapid la o dezordine neîncetată.

Amintiți-vă când ați auzit pentru prima oară despre Ruby on Rails 'ActiveRecord? Ei bine, în capătul PHP al lumii, Eloquent este implementarea sa premier.

Aveți nevoie de câteva exemple?

// Retur toate sarcinile $ tasks = Task :: all (); // Returnați sarcina cu un id de 1 $ task = Task :: find (1); // Actualizați o sarcină $ task = Task :: find (1); $ task-> title = 'Pune cookie-ul jos!'; $ Față de sarcini> Salvare (); // Creați o nouă sarcină Task :: create (['title' => 'Scrie articol']); // Șterge o sarcină Task :: find (1) -> delete ();

Oameni, nu este posibil să scrieți mai multe coduri în PHP! Acum ar fi un lucru dacă Eloquent va permite doar să efectuați operațiuni CRUD de bază pe o masă, dar cu siguranță acest lucru nu este cazul.

Luați în considerare relațiile de masă, cum ar fi un utilizator și sarcinile sale respective. În Laravel, după ce am stabilit o metodă de căutare rapidă pentru fiecare model, putem rezolva cu ușurință relația one-to-one sau orice asociație care contează. Iată câteva exemple pentru a vă mânui apetitul.

// Obțineți toate sarcinile autorului cu un id de 1 $ tasks = User :: find (1) -> tasks; // Obțineți autorul unei sarcini $ author = Task :: find (5) -> user () -> nume de utilizator; // Introduceți o nouă sarcină de autor $ task = new Task ([title: 'Go to store']); Utilizator :: găsi (1) -> (sarcini) -> se introduce ($ sarcină);

Nu este o întindere pentru a considera elocventul cea mai bună implementare ActiveRecord în limba PHP.


Pachete de compozitori

Instalați Compozitor.

Începând cu Laravel 4 (în prezent în Alpha), întregul cadru va fi modularizat și disponibil ca pachete individuale de compozitori.

Compozitor este un sistem de ambalare pentru PHP care este similar cu PEAR, dar mai bine. Ea face procesul de gestionare a dependenței cât mai ușor posibil.

Gândiți-vă la ecosistemul cadru existent. În momentul de față, sunteți forțat să trăiți cu setul de caracteristici de bază al fiecărui cadru. Nu puteți alege să utilizați, de exemplu, Elocvent într-o aplicație CakePHP. După cum vă puteți imagina, acest adevăr a dus la un proces nebun de reinventare a roții din nou ... și peste.

Doamnelor și domnilor, viitorul PHP este unul modular. De ce să instalați un cadru masiv, masiv, când doriți doar câteva dintre ofertele sale? În curând, nu va trebui. Numai necesită un cuvânt elocvent într-un proiect simplu? Bine - nu este deloc o problemă! Pur și simplu instalați-l prin Composer, și treceți mai departe!

Deci, dacă ne îndreptăm spre o lume PHP mai modulară pe bază de pachete, cum se potrivește Laravel? Ei bine, gândiți-vă la aceasta ca o colecție predeterminată de pachete, înfășurate într-un arc! Chiar mai bine, dacă trebuie să actualizați cea mai recentă versiune a cadrului, este la fel de ușor ca și difuzarea compozitor.

Ca un exemplu al flexibilității pe care o oferă acest lucru, să adăugăm biblioteca populară de testări Mockery la o aplicație Laravel. Începeți cu un nou proiect Laravel 4 și editați-l composer.json fișier pentru a solicita Mockery.

"necesită": "iluminare / fundație": "> = 1.0.0", "batjocură / batjocură": "dev-master" app / models "," app / database / migrations "," app / teste / TestCase.php "]

Consultați Packagist.org pentru o listă de pachete Composer disponibile, precum și instrucțiuni de instalare.

Acum că am informat-o pe Compozitor că aplicația noastră necesită Mockery, putem instala dependențele aplicabile.

compozitor

Si asta e! Acum putem folosi batjocoritul în cadrul testelor noastre. Aceasta este puterea compozitorului și Laravel 4 la locul de muncă! Avem roți; să nu mai creați altele noi! Sute de sute de pachete sunt disponibile prin intermediul Packagist.org.

   

Sute de sute de pachete sunt disponibile prin intermediul Packagist.org.


Rutele

Majoritatea dezvoltatorilor PHP nu sunt familiarizați cu nimic altceva decât cele mai naturale sisteme de rute. Creați un arbore de directoare pentru a se potrivi cu URI-ul dorit și treceți mai departe. De exemplu, adăugați un index.php fișier în următorul director: Blog / admin /, și, acum, îl puteți accesa navigând la: localhost: 8888 / blog / admin / index.php. Uşor! Ei bine, poate la început; dar probabil veți găsi că aveți nevoie de mai multă flexibilitate și de controlul asupra cărei rute este declanșată în aplicația dvs..

Laravel are o abordare incredibil de simplă și ușor de utilizat a rutei. De exemplu, să scriem traseul necesar pentru a afișa o vizualizare pentru profilul unui utilizator.

Route :: get ('users / id', functie ($ id) // gaseste user $ user = User :: find ($ id); // display view ('users.profile') -> cu ('user', $ user););

Acum, când un utilizator cere example.com/users/1, utilizatorii / profile.php vizualizarea va fi redată.

Alternativ, putem folosi controlorii tradiționali pentru a manipula logica.

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

Acum, Controllers / Users.php va fi responsabil pentru afișarea vizualizării - în mod specific spectacol metodă.

cu ('utilizator', $ utilizator); 

Autentificare ușoară

Aproape orice aplicație web a substanței va necesita o formă de autentificare. Laravel oferă o interfață simplă, dar ușor de utilizat, pentru autentificarea utilizatorilor.

Începeți prin a crea un utilizatori tabel cu câmpurile necesare pentru nume de utilizator și parola. Amintiți-vă: acesta este un caz de utilizare perfectă pentru o migrare!

Laravel poate atunci atentat, încercare pentru a vă conecta un utilizator - probabil pe baza valorilor furnizate de utilizator dintr-un formular.

Iată un exemplu de bază, minus aspectul de validare.

Route :: post ('login', function () $ credentials = array ('username' => Intrare :: get ('username'), 'password' / efectuați validarea dacă (Auth :: attempt ($ credentials)) // Credentials match.

Rețineți că, în spatele scenei, Laravel va elimina automat parola furnizată și o va compara cu ceea ce este stocat în utilizatori masa.

Presupunând că datele de conectare ale utilizatorului se potrivesc, ID-ul de utilizator va fi stocat în sesiune și utilizatorul va fi conectat. După solicitările ulterioare, puteți lua numele de utilizator al utilizatorului conectat în prezent cu:

$ user = Auth :: user () -> nume de utilizator;

Trimiterea e-mailului

Recunoașteți: trimiterea de e-mail prin intermediul aplicației dvs. este întotdeauna mai complicată decât ar trebui să fie. Nu mai este în Laravel 4!

Construit pe partea de sus a pachetului popular SwiftMailer, veți găsi acum un nou produs config / mail.php fișier în cererea dumneavoastră. Aici puteți specifica acreditările necesare furnizorului dvs. de servicii de e-mail. Iată o versiune descurajată a ceea ce veți găsi:

 'smtp.example.com', 'port' => 2525, 'din' => array ('adresa' => null, 'name' => null), 'encryption' => > null, "parola" => null,);

Pur și simplu înlocuiți valorile cu cele de pe serverul dvs. de e-mail, în consecință.

Apoi, avem nevoie de o vizualizare pentru e-mail. Să creăm unul, numit welcome.blade.php, care va fi folosit atunci când un nou membru se înregistrează pentru site-ul nostru fan Justin Bieber.

  Bună acolo, $ user-> name. Vă mulțumim din nou pentru înscrierea pentru cele mai recente știri ale lui Justin Bieber! Așteptăm cu nerăbdare să vă vedem pe aici. Mulțumesc, conducere  

Cu totul în loc, să configurați exemplul necesar și să trimiteți e-mailul.

Route :: get ('/', function () $ user = Utilizator :: find (1); $ data = ['user' => $ user]; Mail :: trimite ('emails / welcome', $ date, function ($ message) foloseste ($ user) $ message -> to ($ user-> email) atașați ('images / bieberPhoto.jpg');); returați mesajul de poștă electronică de bun venit! ';);

Destul de simplu, nu? Luăm noul utilizator din tabel și declanșăm un e-mail pe adresa de e-mail asociată acelui utilizator. Datorită funcției SwiftMailer, efectuarea de acțiuni aparent complexe, cum ar fi atașarea fișierelor, este un cinch! Acum, fiecare membru nou primește o fotografie a lui Justin Bieber la înscriere. Perfect!


BFF cu coloana vertebrală

"Backbone oferă structură pentru codul spaghetti murdar!"

Laravel 4 face procesul de creare a API-urilor RESTful la fel de simplu ca posibil din punct de vedere uman. Cheia este în modul în care, în mod implicit, JSON va fi returnat de pe un traseu.

Să ne imaginăm că trebuie să returnim o listă a tuturor utilizatorilor ca JSON. Ei bine, Chuck, putem face asta într-o singură linie.

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

Dacă executați acest traseu, va fi afișat un pic de JSON, cum ar fi:

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

Se întreabă în cazul în care parola domeniul este? În Laravel, în cadrul modelului asociat tabelului, putem specifica, prin intermediul unui $ ascunse proprietăți, care se ascund de la ieșirea JSON.

Acum, cu o bibliotecă JavaScript, cum ar fi Backbone, putem prelua aceste date cu ușurință.

var Utilizator = Backbone.Model.extend (); var UsersCollection = Backbone.Collection.extend (model: Utilizator, url: '/ users'); utilizatori var = noi utilizatoriColectare; users.fetch (); users.toJSON (); // [obiect, obiect, obiect]

Cum rămâne cu un singur utilizator? Mai întâi, ar trebui să configuram traseul Laravel potrivit:

Route :: get ('users / id', funcția ($ id) return User :: find ($ id););

După cum am aflat, acest lucru va returna JSON-ul pentru utilizatorul solicitat (minus parola). Apoi, vom crea un model Backbone și vom prelua datele.

var Utilizator = Backbone.Model.extend (urlRoot: '/ users'); var user = utilizator nou (id: 1); user.fetch (); // id: 1, numele de utilizator: '[email protected]'

Observați cum este sarcina lucrării pe partea clientului? Codul nostru Laravel este ca barele goale.


migraţii

Dacă sunteți exclusiv un dezvoltator PHP, probabil că nu ați experimentat încă bucuria migrației, care a fost popularizată pentru prima dată în cadrul Ruby on Rails.

Gândiți-vă la migrații ca la controlul versiunii pentru baza de date. Ce s-ar întâmpla dacă, a doua zi după ce ați adăugat acel câmp nou la dvs. sarcini tabel, ați dat seama că nu este necesar, la urma urmei. Păi, ai elimina manual câmpul, nu? Dar cum rămâne cu ceilalți dezvoltatori din echipa ta? Codul lor se poate rupe dacă nu le spui!

Cu migrațiile, totuși, noi doar răsturnăm migrația anterioară și continuăm cu ziua noastră! Chiar mai bine, atunci când împingeți modificările pe serverul dvs., este simplu php artizan migrează comanda va actualiza automat baza de date de producție. Atunci când este combinat cu Schema Generator Laravel, acest lucru face ca procesul de administrare a bazelor de date să fie cât se poate de ușor.

Să creați o migrare pentru a adăuga o nouă utilizatori tabel la baza noastră de date. Din linia de comandă:

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

În fragmentul de mai sus, specificăm numele tabelului, precum și numele tabelului --crea pentru a specifica că creăm o tabelă nouă, mai degrabă decât modificăm una deja existentă.

Această comandă va crea un nou fișier de migrare în cadrul aplicației noastre. Putem apoi să folosim clasa Schema lui Laravel pentru a pregăti schema mesei noastre.

incremente ( 'id'); $ Table-> string ( 'titlu'); );  / ** * Reveniți la migrații. * / funcția publică în jos () Schema :: drop ('tasks'); 

Observați modul în care această clasă oferă două metode: sus și jos, care specifică ce măsuri ar trebui să ia Laravel atunci când execută o migrare, precum și rulând-o înapoi.

În acest caz, pe sus(), creăm o tabelă nouă, sarcini, și specificați două câmpuri pentru id și titlu a sarcinii, respectiv. Când rulați migrația înapoi, pur și simplu abandonăm masa.

Rulați migrarea prin revenirea la Terminal și tastând:

php artizan migrează

Asta e! Acum ai un brand nou sarcini tabel cu două câmpuri ... Uh, trebuie să o întoarceți înapoi? Simplu:

php artisan migrează: răsturnare

La revedere sarcini masa.


Lamă

Laravel's Blade template engine oferă o sintaxă curată pentru vederi. De exemplu, cu PHP obișnuit, pentru a filtra prin intermediul unei liste de persoane și a ecou numele lor într-un element de listă, am putea scrie:

Această sintaxă poate fi aplicată majorității structurilor de control ale PHP.

Nu e prea rău, dar putem face mai bine. Orice vizualizare Laravel care conține .blade.php extinderea fișierului va fi analizată în consecință. Ca urmare, fragmentul anterior poate fi apoi înlocuit cu:

    @foreach ($ oameni ca $ p)
  • $ p
  • @endforeach

Observați cum variabilele care trebuie repetate sunt înfășurate , similar cu ceea ce ați găsi într-un motor care templatează JavaScript, cum ar fi Handlebars.

Blade poate fi, de asemenea, utilizat pentru layouts elegante și pagini master. Să creați o bază de bază pentru a demonstra această funcționalitate.

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

@Randament linia este cheia. Aceasta specifică faptul că orice copil vede cu o secțiune id de recipient ar trebui să fie imbricate acolo.

Să creați o vizualizare nouă.

// views / home / hello.blade.php @layout ('aspect') @ secțiune ('container') 

Bună ziua, $ user-> name!

@endsection

Terminat! Pagini de master ușor în PHP!


Controlere de resurse

Fără un pic de ajutor, crearea unui serviciu RESTful în PHP se poate dovedi oarecum dificilă. Ei bine, în Laravel 4, nu ar putea fi mai simplu. Cadrul oferă ceea ce numim resurse reziduale. Hai să încercăm.

În interiorul dvs. rute fișier, specificați o nouă resursă.

Rute :: resursă ('tasks', 'TasksController');

Această linie de cod indică faptul că vrem să creăm o nouă resursă, sarcini, și plasați TasksController controler responsabil cu manipularea logicii pentru fiecare rută.

Atunci când respectați principiile REST, această resursă va înregistra în mod automat rute pentru:

  • Obțineți sarcini (Afișați toate sarcinile)
  • GET tasks / id (Afișați o singură sarcină)
  • GET sarcini / creați (afișați formularul pentru a crea o nouă sarcină)
  • Activități POST (Creați o nouă sarcină)
  • Obțineți sarcină / id / editați (editați o singură sarcină)
  • Activități PUT / id (Task de actualizare)
  • DELETE tasks / id (Ștergere activitate)

În continuare, să creăm asta TasksController, dar, mai degrabă decât să o facem manual, l-am lăsat pe Artisan să se ocupe de plută.

php artizan controller: face TasksController

Acest lucru va crea un nou controlere / TasksController.php controler, și umple-l cu un pic de boilerplate.

 

Fiecare dintre aceste metode va fi declanșată când se declanșează ruta RESTful aplicabilă. Deci, pentru a afișa un formular pentru a crea un nou sarcină, vom încărca vizualizarea aplicabilă în cadrul crea care va fi declanșată când example.com/tasks/create este solicitată. Această formă ar trebui să POST la /sarcini, caz în care magazin metoda va fi declanșată.

Nu putea fi mai curat!

Consultați pagina Vimeo a UserScape pentru cele mai recente emisiuni oficiale Laravel


Sesizarea bazei de date

De câte ori ți-ai găsit-o manual, "să inserezi" o tabelă de baze de date cu înregistrări inactive, în scopul testării? Pentru mine, ei bine, este un număr mare! Laravel 4 ne permite să specificăm a sămânță fișier pentru o masă.

Pentru a le încerca, creați un fișier nou cu același nume ca și tabelul său în cadrul app / baze de date / semințe directorul aplicației dvs. Acest fișier ar trebui să stocheze o serie de tablouri, fiecare conținând perechile cheie-valoare necesare. Iată un exemplu:

 'Du-te la magazin'] ['title' => 'Finalizați articolul Laravel'] ['title' => 'Pick up ouă'. ]]);

Am descris acum trei rânduri noi pentru sarcini tabel în baza noastră de date. Să sămânțăm.

php artisan db: semințe

Terminat!


Modelul Setters și Getters

Există probabil o varietate de acțiuni pe care le declanșați frecvent când setați sau obțineți un câmp dintr-o tabelă de baze de date. De exemplu, atunci când un utilizator se înregistrează, pentru a respecta cele mai bune practici de securitate, trebuie să ne întoarcem întotdeauna parola. Mai degrabă decât să faceți manual lucrarea, să actualizăm în schimb Utilizator și specificați faptul că, atunci când stabiliți o parolă, ar trebui mai întâi să fie rulate.

parola ); 

Uşor! Acum, nu trebuie să ne facem griji cu privire la acea piesă a puzzle-ului, la înregistrarea unui nou utilizator. Firește, opțiunea inversă este disponibilă și în cazul în care trebuie să procesați o valoare a câmpului înainte de ao "obține".

Ce se întâmplă dacă trebuie să îmbrăcăm un timbru sau un nume? Și acest lucru se poate realiza prin model, dacă doriți.

nume.name ". $ this-> lastName;

Acest nou Numele complet() metoda va fi acum disponibilă instanței noastre de utilizator.

echo Utilizator :: găsi (1) -> fullName (); // John Doe

Comunitate (Conferința)

Poate mai important decât orice altceva, Laravel, într-un timp relativ scurt, a strâns o comunitate înfloritoare, evanghelică, compusă din unii dintre cei mai influenți dezvoltatori din comunitatea PHP.

De ce este important acest lucru? Simplu: cu evanghelizarea vine educația și contribuția. Cel mai mare obstacol pentru un nou cadru este obtinerea de cuvânt afară, și arată oameni cum să utilizați lucru dang! Din fericire, Laravel exceleaza in documentatie si tutoriale / screencast-uri pe web - inclusiv un curs complet de catre dvs. cu adevarat!

Aflați intraturile Laravel aici la Tuts + Premium!

Adevărul este că tocmai am zgâriat suprafața a ceea ce este posibil în Laravel. Încă nu am acoperit tratarea erorilor lui Laravel, integrarea PHPUnit, încărcarea dornică (înainte și după recuperarea colecțiilor) și multe altele. Asigurați-vă că vă referiți la documentația fantastică pentru a săturați mai adânc în cadru și vă păstrați ochii descuși pentru lansarea oficială a Versiunii 4!

Comunitatea populară Nettuts + oferă o serie de tutoriale specifice Laravel.

Dacă acest articol a servit drept impuls pentru dragostea nouă a lui PHP și a lui Laravel, probabil că veți lua parte la primul Laracon (Conferința) anuală, programată pentru sfârșitul lunii februarie 2013, la Washington D.C. Poate vă voi vedea acolo!

Prima conferință la Laravel, Laracon, va avea loc la Washington, în perioada 22-23 februarie 2013. Aflați mai multe la http://conference.laravel.com

Cod