Cinci pietre ascunse de Laravel

Mulți dezvoltatori care utilizează Laravel probabil abia scarpină suprafața a ceea ce oferă cadrul. În timp ce documentația acoperă cele mai frecvente cazuri de utilizare și caracteristicile evidente, nu acoperă totul. 

Nu mă înțelegeți greșit, documentația este bună, este doar că puteți face atât de mult, este greu de documentat Tot. Din pricina asta, vom arunca o privire la unele dintre pietrele ascunse care se ascund în Laravel.

Vizualizări în cascadă

Disponibil din: V4.0.0
documentat: Nu

Viziunile pot fi în cascadă la fel ca fișierele de configurare. Viziunile în cascadă sunt extrem de utile atunci când se dezvoltă un sistem extensibil. Luați în considerare următoarea structură de directoare.

/ app / views / blog / index.php / themes / default / views / blog /index.blade.php /theme.blade.php

Ideea este că atunci când noi retur View :: make ('theme :: blog.index'); acesta va privi mai întâi în teme / default / vizualizări director și apoi, în cazul în care nu poate găsi punctul de vedere, de rezervă la app / vizualizări.

Pentru a face acest lucru vom folosi Vezi :: addNamespace pentru a ne înregistra propriul spațiu de nume cu cele două locații.

Afișați :: addNamespace ('theme', [base_path (). '/ Themes / default / views', path_app (). '/ Views'));

Colecții

Disponibil din: V4.0.0
documentat: Parţial

Colecțiile reprezintă o modalitate excelentă de a interacționa și de a gestiona matrice. Colecțiile au o varietate de metode la îndemână și implementează o serie de interfețe utile, cum ar fi ArrayableInterface, IteratorAggregate, și JsonableInterface.

Să presupunem că construim un mic motor de blogging care folosește fișiere plate pentru stocare. Vrem să putem efectua operațiuni cum ar fi sortarea, filtrarea și paginarea.

Implementarea motorului de blogare este dincolo de sfera acestui articol, dar să ne imaginăm că avem o matrice, $ articole, și fiecare membru al matricei este o instanță a unui Articol clasă. Tot ce trebuie să facem este să primim o nouă instanță Colectie și dă-i o serie de articole.

$ articles = nou iluminare \ Support \ Collection ($ arrayOfArticles);

Triere

Folosind colecția, putem sorta articolele noastre. Să sortăm articolele și să afișăm mai întâi cele mai recente articole actualizate. Din motive de acest articol, să presupunem că atunci când încărcăm articole din sistemul de fișiere, setăm updatedAt proprietate până la ultima modificare a momentului fișierului.

$ articles-> sortByDesc (functie ($ article) return $ article-> updatedAt;);

filtrează după și sortByDesc metode acceptă un apel invers, acest apel invers ar trebui să returneze o valoare care poate fi utilizată pentru sortarea colecției. În cazul nostru, putem returna articolele modificate ultima dată și colecția poate sorta în funcție de acestea.

Filtrarea

Similar cu sortarea, putem folosi și colecția pentru a filtra articolele noastre la fel ca a UNDE clauza din MySQL. Să ne filtram articolele pe baza unei căutări care ar putea fi rulată.

filtru (functie ($ articol) foloseste ($ searchQuery) retur preg_match (sprintf ('/% s / m', $ searchQuery), $ article-> body);

filtru metoda returnează de fapt o nouă instanță Illuminate \ Suport \ Colectia așa că trebuie să o atribuim rezultate $ variabil. Această colecție nouă va conține doar articolele care au menționat "Laravel rocks!" În corp.

Paginare

Folosind colecția, putem paginări articolele noastre, astfel încât nu avem prea multe articole care apar pe o singură pagină.

$ perPage = 1; $ page = Intrare :: get ('pagina', 1); dacă ($ page> ($ articles-> count () / $ perPage)) $ page = 1;  $ pageOffset = ($ page * $ perPage) - $ perPage; $ results = $ articole-> slice ($ pageOffset, $ perPage);

Utilizarea felie , extragem o parte a articolelor din colecție și le atribuim rezultate $ variabil. 

Acest exemplu ar putea fi apoi luat în continuare prin crearea unui nou exemplu al lui Laravel paginator clasă. În acest fel, acesta poate genera toate numerele de pagini și link-uri pentru tine.

Mai este!

Am putea obține un articol aleatoriu:

$ article = $ articles-> random ();

Putem, de asemenea, să repetăm ​​colecția noastră de articole ca și cum ar fi o serie de reguli. Acest lucru este mulțumit tuturor IteratorAggregate și ArrayIterator interfețe.

foreach ($ articole ca $ articol) echo $ article-> body; 

Și putem chiar transforma articolele noastre într-o gamă regulată sau în reprezentarea JSON.

$ array = $ articole-> toArray (); $ json = $ articole-> toJson ();

Una dintre cele mai bune metode este probabil a se grupa cu, care ne permite să grupăm articole printr-o cheie specifică. Imaginați-vă că fiecare articol avea câteva meta-date în partea superioară, care a fost analizat și scos din corpul articolelor.

Deși parsarea acestor meta date depășește domeniul de aplicare al acestui articol, vom presupune că este analizat și este o proprietate asupra Articol instanță. Puteai folosi ulterior a se grupa cu pentru a grupa articolele de categoria în care au fost postate.

$ results = $ articole-> groupBy ("categorie"); 

Toate articolele care au aceeași categorie vor fi grupate. Puteti obtine apoi articolele pentru o anumita categorie.

foreach ($ results-> get ('tutorial') ca $ articol) echo $ article-> body; 

Colecțiile sunt una dintre cele mai bune pietre ascunse Laravel are de oferit.

Filtre cu expresii regulate

Disponibil din: v4.1.19
documentat: Nu

Filtrarea rutelor în Laravel este o sarcină comună pe care mulți dintre noi o fac în toate proiectele noastre. Un filtru vă permite să efectuați activități, cum ar fi autentificarea utilizatorilor sau limitarea vitezei, înainte sau după traseul unui traseu. Folosim filtrele Route :: Filtru și le pot aplica pe rute individuale, pe un grup de traseu sau prin utilizarea Route :: când și aplicarea la un model de potrivire.

Route :: filter (funcția 'restricționată', funcția ($ route, $ request, $ group) // Restricționarea accesului utilizatorului bazat pe valoarea grupului $); Traseu: când ('admin / *', 'restricted: admin'); 

În acest exemplu, creăm a restrâns filtru care se așteaptă la un singur parametru, grup de $. $ traseu și cerere $ parametrii sunt întotdeauna acordați unui filtru înainte.

Dar dacă am fi dorit mai multă flexibilitate? Să presupunem că am vrut să aplicăm filtrul tuturor admin rute cu exceptia pentru admin / autentificare. Am putea folosi un grup de rute și pur și simplu să mutăm ruta în cauză în afara grupului. Sau am putea folosi Route :: whenRegex și scrie propria noastră expresie regulată.

Traseu :: whenRegex ('/ ^ admin (\ / (?! login) \ S +)? $ /', 'Restricționat: admin');

Această expresie regulată asigură pur și simplu că se aplică doar pe rutele care încep cu admin și nu sunt urmate de /Logare, dar poate fi urmat de orice altceva. Excelent. Acum avem restricționat: admin filtru aplicat pe toate rutele, cu excepția celor ale noastre admin / autentificare traseu.

Cutia de mesaje

Disponibil din: V4.0.0
documentat: Parţial

Ați folosit fără îndoială Illuminate \ Suport \ MessageBag pentru o vreme, fără să-l realizați. Cel mai mare rol MessageBag play-urile conțin toate erorile de validare când utilizați validatorul built-in al lui Laravel.

Un erori de $ este disponibilă în fiecare vizualizare care va conține fie o imagine goală MessageBag instanță sau instanța pe care ați strălucit sesiunea cu Redirecționează :: la ( '/') -> withErrors ($ validator);

Există o șansă bună ca mulți dintre voi să faceți așa ceva în formele dvs. atunci când afișați un mesaj de eroare sub o anumită intrare.

Form :: text ('username', null) @if ($ errors-> are ('username')) 
$ errors-> first ('username')
; @endif

Puteți să eliminați asta dacă declarație în întregime și de a folosi al doilea parametru al primul - metoda de împachetare a mesajului în div.


 Form :: text ('nume de utilizator', null) $ errors-> first ('username', '
:mesaj
')

Mult, mult, mult mai frumos!

Fluent

Disponibil din: v3.0.0
documentat: Parţial

Fluent clasa a fost în jur de mult timp și este de fapt utilizat în interiorul cadrului în sine atunci când creați migrații cu schema constructor. Între Laravel 3 și Laravel 4 clasa însăși nu sa schimbat, singurele diferențe mari sunt câteva interfețe.

Pentru a utiliza Fluent clasa tot ce trebuie să faceți este să obțineți o instanță și să plecați.

$ user = nou Iluminare \ Suport \ Fluent; $ User-> numele ( 'Jason') -> țară ( 'Australia') -> abonat ();

Exemplul are acum 3 atribute definite, Nume cu o valoare de Jason, țară cu o valoare de Australia, și abonat cu un boolean Adevărat valoare.

Înainte de Laravel 4.1 puteai doar să setați și să obțineți atributele din instanță. De la Laravel 4.1 puteți folosi toArray și toJson metode pentru a obține matricea de atribute și respectiv reprezentarea JSON. 

Începând cu Laravel 4.2, clasa implementează și JsonSerializable ceea ce înseamnă că puteți trece direct instanța în json_encode.

Sunt chiar mai multe!

Am analizat mai multe pietre utile din cadrul Laravel. Dar, așa cum ați ghicit, există și mai multe în cadrul. 

Cea mai bună modalitate de a afla ce altceva ar putea avea Laravel este să sapi în sursă. Nu este atât de înfricoșător cum credeați și veți învăța o mulțime despre cadrul pe care construiți.

Dacă aveți pietre suplimentare pe care le-ați găsit, nu ezitați să le distribuiți în comentarii!

Cod