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.
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'));
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);
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.
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.
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.
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.
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.
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.
Unerori 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 cuRedirecț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!
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
.
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!