Probabilmente molti sviluppatori che usano Laravel hanno appena scalfito la superficie di ciò che il framework ha da offrire. Mentre la documentazione copre i casi d'uso più comuni e le caratteristiche ovvie, non copre tutto.
Non fraintendermi, la documentazione va bene, è solo che c'è così tanto che puoi fare, è difficile da documentare qualunque cosa. Per questo motivo, daremo un'occhiata ad alcune delle gemme nascoste che si nascondono in Laravel.
Disponibile da: v4.0.0
documentato: No
Le viste sono in grado di sovrapporsi in modo simile ai file di configurazione. Le viste a cascata sono estremamente utili quando si sviluppa un sistema di temi estensibile. Considera la seguente struttura di directory.
/ app / views / blog /index.blade.php / themes / default / views / blog /index.blade.php /theme.blade.php
L'idea è che quando noi return View :: make ('theme :: blog.index');
prima guarderà nel themes / default / views
directory e poi, se non riesce a trovare la vista, fallback a app / views
.
Per fare questo usiamo Vista :: addNamespace
per registrare il nostro spazio dei nomi con le due posizioni.
Visualizza :: addNamespace ('tema', [base_path (). '/ Temi / default / viste', app_path (). '/ Views']);
Disponibile da: v4.0.0
documentato: parzialmente
Le raccolte sono un ottimo modo per interagire e gestire gli array. Le raccolte hanno una varietà di metodi pratici e implementano un numero di interfacce utili come ArrayableInterface
, IteratorAggregate
, e JsonableInterface
.
Diciamo che stiamo costruendo un piccolo motore di blogging che utilizza file flat per l'archiviazione. Vogliamo essere in grado di eseguire operazioni come l'ordinamento, il filtraggio e l'impaginazione.
L'implementazione del motore di blogging esula dallo scopo di questo articolo, ma immaginiamo di avere un array, $ articoli
, e ogni membro dell'array è un'istanza di un Articolo
classe. Tutto quello che dobbiamo fare è ottenere una nuova istanza di Collezione
e dargli la nostra gamma di articoli.
$ articles = new Illuminate \ Support \ Collection ($ arrayOfArticles);
Usando la collezione possiamo ordinare i nostri articoli. Ordiniamo i nostri articoli e mostriamo per primi gli articoli aggiornati più di recente. Per il gusto di questo articolo, immaginiamo che durante il caricamento degli articoli dal file system impostiamo il file updatedAt
proprietà all'ultima ora modificata del file.
$ articles-> sortByDesc (function ($ article) return $ article-> updatedAt;);
Il ordina per
e sortByDesc
i metodi accettano un callback, questa callback dovrebbe restituire un valore che può essere usato per ordinare la collezione. Nel nostro caso, possiamo semplicemente restituire gli articoli dell'ultima ora modificata e la raccolta può essere ordinata in base a ciò.
Analogamente all'ordinamento, possiamo anche utilizzare la raccolta per filtrare i nostri articoli in modo molto simile a DOVE
clausola in MySQL. Filtriamo i nostri articoli in base a una ricerca che potrebbe essere stata eseguita.
filter (funzione ($ article) use ($ searchQuery) return preg_match (sprintf ('/% s / m', $ searchQuery), $ article-> body););
Il filtro
il metodo restituisce effettivamente una nuova istanza di Illuminare \ Support \ Collection
quindi dobbiamo assegnarlo al $ risultati
variabile. Questa nuova collezione conterrà solo gli articoli che menzionano "rocce di Laravel!" Nel corpo.
Usando la collezione possiamo impaginare i nostri articoli in modo da non avere troppi articoli visualizzati su una singola pagina.
$ per pagina = 1; $ page = Input :: get ('page', 1); if ($ page> ($ articles-> count () / $ perPage)) $ page = 1; $ pageOffset = ($ page * $ perPage) - $ perPage; $ results = $ articles-> slice ($ pageOffset, $ perPage);
Usando il fetta
metodo, estraiamo una parte degli articoli nella raccolta e la assegniamo al $ risultati
variabile.
Questo esempio potrebbe poi essere preso ulteriormente creando una nuova istanza di Laravel paginator
classe. In questo modo può generare tutti i numeri di pagina e i link per te.
Potremmo ottenere un articolo a caso:
$ article = $ articles-> random ();
Possiamo anche scorrere la nostra collezione di articoli come se fosse un array normale. Questo è tutto grazie al IteratorAggregate
e ArrayIterator
interfacce.
foreach ($ articoli come $ articolo) echo $ article-> body;
E possiamo perfino trasformare i nostri articoli in una matrice normale o nella sua rappresentazione JSON.
$ array = $ articles-> toArray (); $ json = $ articles-> toJson ();
Uno dei metodi più interessanti è probabilmente raggruppa per
, che ci consente di raggruppare articoli con una chiave specifica. Immagina che ogni articolo avesse alcuni metadati nella parte superiore che sono stati analizzati e rimossi dal corpo degli articoli.
Sebbene l'analisi di questi metadati esuli dallo scopo di questo articolo, assumeremo che sia analizzata ed è una proprietà sul Articolo
esempio. Potresti quindi usarlo raggruppa per
raggruppare gli articoli in base alla categoria in cui sono stati pubblicati.
$ risultati = $ articoli-> groupBy ('categoria');
Tutti gli articoli che condividono la stessa categoria saranno raggruppati. Potresti quindi ottenere gli articoli per una categoria specifica.
foreach ($ results-> get ('tutorial') come $ article) echo $ article-> body;
Le collezioni sono una delle migliori gemme nascoste che Laravel ha da offrire.
Disponibile da: v4.1.19
documentato: No
Il filtraggio delle rotte in Laravel è un compito comune che molti di noi fanno in tutti i nostri progetti. Un filtro consente di eseguire attività quali l'autenticazione dell'utente o la limitazione della velocità, prima o dopo l'attivazione di una rotta. Creiamo filtri usando Percorso :: Filtro
e può applicarli a percorsi individuali, a un gruppo di percorsi o utilizzando Percorso :: quando
e applicando a un modello abbinato.
Route :: filter ('restricted', function ($ route, $ request, $ group) // Limita l'accesso dell'utente in base al valore di $ group); Percorso: quando ('admin / *', 'restricted: admin');
In questo esempio, creiamo a limitato
filtro che si aspetta un singolo parametro, $ gruppo
. Il $ route
e $ request
i parametri vengono sempre assegnati a un filtro precedente.
Ma se volessimo più flessibilità? Diciamo che volevamo applicare il filtro a tutti Admin
itinerari tranne per admin / login
. Potremmo usare un gruppo di percorsi e spostare semplicemente il percorso in questione al di fuori del gruppo. O potremmo usare Percorso :: whenRegex
e scrivi la nostra espressione regolare.
Route :: whenRegex ('/ ^ admin (\ / (?! login) \ S +)? $ /', 'Restricted: admin');
Questa espressione regolare si limita a fare in modo che si applichi solo alle rotte che iniziano con Admin
e non sono seguiti da /accesso
, ma può essere seguito da qualsiasi altra cosa. Eccellente. Ora abbiamo il nostro ristretta: admin
filtro applicato a tutti i percorsi tranne il nostro admin / login
itinerario.
Disponibile da: v4.0.0
documentato: parzialmente
Sicuramente hai usato Illuminare \ Support \ Messagebag
per un po 'ora senza nemmeno rendersene conto. Il più grande ruolo Messagebag
le riproduzioni contengono tutti gli errori di convalida quando si utilizza il validatore integrato di Laravel.
Un$ errori
variabile è disponibile in ogni vista che conterrà o vuotaMessagebag
istanza o l'istanza con cui è stata visualizzata la sessioneRedirect :: a ( '/') -> withErrors ($ validatore);
C'è una buona possibilità che molti di voi stiano facendo qualcosa di simile nei moduli quando visualizzano un messaggio di errore sotto un particolare input.
Form :: text ('username', null) @if ($ errors-> has ('username')))$ errors-> first ('username')>; @finisci se
Puoi effettivamente rimuoverlo Se
dichiarazione interamente e utilizzare il secondo parametro del primo
metodo per avvolgere il messaggio in div
.
Form :: text ('username', null) $ errors-> first ('username', ':Messaggio')
Molto, molto, molto più bello!
Disponibile da: v3.0.0
documentato: parzialmente
Il Fluente
la classe è in circolazione da molto tempo e viene effettivamente utilizzata all'interno del framework stesso durante la creazione di migrazioni con lo schema di costruzione. Tra Laravel 3 e Laravel 4 la classe stessa è appena cambiata, le uniche grandi differenze sono alcune altre interfacce.
Per usare il Fluente
classe tutto quello che devi fare è ottenere un'istanza e via vai.
$ user = new Illuminate \ Support \ Fluent; $ User-> nome ( 'Jason') -> paese ( '' Australia') -> abbonato ();
L'istanza ora ha 3 attributi definiti, nome
con un valore di Jason
, nazione
con un valore di Australia
, e abbonato
con un booleano vero
valore.
Prima di Laravel 4.1 si poteva solo impostare e ottenere gli attributi dall'istanza. Dal momento che Laravel 4.1 è possibile utilizzare il toArray
e toJSON
metodi per ottenere rispettivamente la matrice di attributi e la sua rappresentazione JSON.
A partire da Laravel 4.2, la classe implementa anche il JsonSerializable
interfaccia che significa che puoi passare l'istanza direttamente in json_encode
.
Abbiamo esaminato diverse gemme utili del framework Laravel. Ma, come hai intuito, c'è ancora di più all'interno del framework.
Il modo migliore per scoprire cos'altro potrebbe offrire Laravel è scavare nella fonte. Non è così spaventoso come penseresti e imparerai molto sul framework su cui stai costruendo.
Se hai altre gemme che hai trovato, non esitare a condividerle nei commenti!