Cinque gemme nascoste di Laravel

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.

Viste a cascata

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']);

collezioni

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);

Ordinamento

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ò.

filtraggio

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.

paginatura

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.

C'è più!

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.

Filtri di espressione regolari

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.

La borsa dei messaggi

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 vuota Messagebag istanza o l'istanza con cui è stata visualizzata la sessione Redirect :: 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!

Fluente

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.

C'è ancora di più!

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!