Comprendere le basi di Laravel Middleware

In questo articolo, ci addentreremo nel framework di Laravel per comprendere il concetto di middleware. La prima metà di questo articolo inizia con un'introduzione al middleware e per cosa è effettivamente utilizzata.

Mentre andiamo avanti, vedremo come creare un middleware personalizzato in un'applicazione Laravel. Dopo aver creato il tuo middleware personalizzato, esploreremo le opzioni disponibili per registrarlo con Laravel in modo che possa essere effettivamente richiamato durante il flusso di elaborazione della richiesta.

Spero che tu ti consideri familiare con i concetti base di Laravel e lo strumento da riga di comando Artisan per generare il codice di scaffolding. Naturalmente, un'installazione funzionante dell'ultima applicazione Laravel consente di eseguire immediatamente gli esempi forniti in questo articolo.

Che cosa è il middleware in Laravel?

Potremmo pensare al middleware come a un meccanismo che consente di collegarsi al tipico flusso di elaborazione delle richieste di un'applicazione Laravel. Una tipica elaborazione del percorso di Laravel passa attraverso alcune fasi dell'elaborazione delle richieste e il middleware è uno di quei livelli che un'applicazione deve attraversare.

Quindi, qual è esattamente il punto di aggancio nel flusso di elaborazione delle richieste di Laravel? Pensa a qualcosa che richiede un'esecuzione nelle prime fasi del bootstrap di un'applicazione. Ad esempio, è necessario autenticare gli utenti nelle fasi iniziali per decidere se possono accedere al percorso corrente.

Alcune cose che potrei pensare che potresti ottenere attraverso il middleware sono:

  • registrazione delle richieste
  • reindirizzare gli utenti
  • alterando / disinfettando i parametri in arrivo
  • manipolare la risposta generata dall'applicazione Laravel
  • e tanti altri

In effetti, l'applicazione Laravel predefinita contiene già un paio di importanti pezzi di middleware. Ad esempio, c'è il middleware che controlla se il sito è in modalità di manutenzione. D'altra parte, c'è il middleware per disinfettare i parametri di richiesta di input. Come accennato in precedenza, l'autenticazione dell'utente è anche raggiunta dal middleware stesso.

Spero che la spiegazione finora ti aiuti a sentirti più sicuro del termine middleware. Se sei ancora confuso, non preoccuparti di questo, poiché stiamo andando a creare un middleware personalizzato dalla prossima sezione in poi che dovrebbe aiutarti a capire esattamente come il middleware potrebbe essere usato nel mondo reale.

Come creare un middleware personalizzato

In questa sezione creeremo il nostro middleware personalizzato. Ma cosa esattamente realizzerà il nostro middleware personalizzato?

Recentemente, mi sono imbattuto in un requisito personalizzato del mio client che, se gli utenti accedono al sito da qualsiasi dispositivo mobile, dovrebbero essere reindirizzati all'URL del sottodominio corrispondente con tutti i parametri della query querys intatti. Credo che questo sia il caso d'uso perfetto per dimostrare come il middleware Laravel possa essere utilizzato in questo particolare scenario.

Il motivo per cui vorremmo utilizzare il middleware in questo caso è la necessità di collegarci al flusso di richieste dell'applicazione. Nel nostro middleware personalizzato, ispezioneremo l'agente utente e gli utenti verranno reindirizzati all'URL mobile corrispondente se utilizzano un dispositivo mobile.

Dopo aver discusso di tutta questa teoria, passiamo allo sviluppo attuale, e questo è il modo migliore per comprendere un nuovo concetto, non è vero??

Come sviluppatore Laravel, è lo strumento Artisan che finirai per utilizzare la maggior parte del tempo per creare codice template di base se desideri creare funzionalità personalizzate. Usiamolo per creare un codice template di base per il nostro middleware personalizzato.

Dirigiti alla riga di comando e vai alla radice del documento del tuo progetto. Eseguire il seguente comando per creare il modello di middleware personalizzato MobileRedirect.

php artisan make: middleware MobileRedirect

E quello dovrebbe creare un file app / Http / Middleware / MobileRedirect.php con il seguente codice.

Più spesso, noterete l'implementazione di maniglia metodo che funge da spina dorsale del middleware e la logica primaria del middleware che stai cercando di implementare dovrebbe andare qui.

Permettetemi di cogliere questa opportunità per presentare i tipi di middleware con cui Laravel viene fornito. Principalmente, ci sono due tipi: prima del middleware e dopo il middleware.

Come suggerisce il nome, il middleware precedente è qualcosa che viene eseguito prima che la richiesta venga effettivamente gestita e che la risposta sia stata creata. D'altra parte, il middleware after viene eseguito dopo che la richiesta viene gestita dall'applicazione e la risposta è già stata creata in questo momento.

Nel nostro caso, abbiamo bisogno di reindirizzare l'utente prima che la richiesta sia gestita, e quindi sarà sviluppato come un middleware precedente.

Vai avanti e modifica il file app / Http / Middleware / MobileRedirect.php con i seguenti contenuti.

mobile == "1") return redirect ('mobile-site-url-goes-here');  return $ next ($ request);  

Per semplicità, controlliamo semplicemente l'esistenza di mobile parametro querystring e se è impostato su VERO, l'utente verrà reindirizzato all'URL del sito mobile corrispondente. Ovviamente, vorresti utilizzare la libreria di rilevamento degli user agent se desideri rilevarla in tempo reale.

Inoltre, vorresti sostituire il mobili-site-url-goes-here instradare con il percorso o l'URL corretto in quanto è solo un segnaposto a scopo dimostrativo.

Seguendo la nostra logica personalizzata, c'è una chiamata a $ Successiva ($ request) che consente di elaborare ulteriormente la richiesta nella catena di applicazioni. La cosa importante da notare nel nostro caso è che abbiamo inserito la logica di rilevamento mobile prima del $ Successiva ($ request) chiama, rendendolo effettivamente un middleware precedente.

E con questo, il nostro middleware personalizzato è quasi pronto per essere testato. Al momento, Laravel non sa nulla del nostro middleware. Per farlo, devi registrare il tuo middleware con l'applicazione Laravel, e questo è esattamente l'argomento della nostra prossima sezione.

Prima di passare alla sezione successiva, vorrei dimostrare come appare il middleware successivo, nel caso in cui qualcuno là fuori sia curioso.

Come avresti già notato, la logica personalizzata del middleware viene eseguita dopo che la richiesta è stata elaborata dall'applicazione Laravel. A questo punto, hai accesso a $ risposta anche oggetto, che ti permette di manipolare certi aspetti di esso, se lo desideri.

Questa è stata la storia del dopo middleware.

Il nostro middleware personalizzato in azione

Questa sezione descrive il processo di registrazione del middleware con l'applicazione Laravel in modo che possa essere effettivamente richiamato durante il flusso di elaborazione della richiesta.

Vai avanti e apri il file app / Http / Kernel.php e cerca il seguente frammento.

/ ** * Stack del middleware HTTP globale dell'applicazione. * * Questi middleware vengono eseguiti durante ogni richiesta alla tua applicazione. * * @var array * / protected $ middleware = [\ Illuminate \ Foundation \ Http \ Middleware \ CheckForMaintenanceMode :: class, \ Illuminate \ Foundation \ Http \ Middleware \ ValidatePostSize :: class, \ App \ Http \ Middleware \ TrimStrings :: class, \ Illuminate \ Foundation \ Http \ Middleware \ ConvertEmptyStringsToNull :: class,]; 

Come puoi vedere, il $ middleware contiene la gamma di middleware fornita con l'installazione predefinita di Laravel. Il middleware qui elencato verrà eseguito su ogni richiesta Laravel, quindi è un candidato ideale per inserire il nostro middleware personalizzato.

Vai avanti e includi il nostro middleware personalizzato come mostrato nello snippet seguente.

middleware $ protetto = [\ Illuminate \ Foundation \ Http \ Middleware \ CheckForMaintenanceMode :: class, \ Illuminate \ Foundation \ Http \ Middleware \ ValidatePostSize :: class, \ App \ Http \ Middleware \ TrimStrings :: class, \ Illuminate \ Foundation \ Http \ Middleware \ ConvertEmptyStringsToNull :: class, \ App \ Http \ Middleware \ MobileRedirect :: class,]; 

Ora, prova ad accedere a uno dei tuoi percorsi Laravel con la QueryString mobili = 1, e questo dovrebbe far scattare il nostro codice middleware!

Ecco come devi registrare il tuo middleware che deve essere eseguito su ogni richiesta. Tuttavia, a volte si desidera eseguire solo il middleware per i percorsi specifici. Controlliamo come ottenere ciò usando il $ routeMiddleware.

Nel contesto del nostro esempio corrente, supponiamo che gli utenti vengano reindirizzati a un sito mobile se accedono a un percorso specifico sul tuo sito. In questo scenario, non si desidera includere il middleware in $ middleware elenco.

Invece, si desidera allegare il middleware direttamente alla definizione della rotta, come mostrato di seguito.

Route :: get ('/ hello-world', 'HelloWorldController @ index') -> middleware (\ App \ Http \ Middleware \ MobileRedirect :: class);

In effetti, potremmo fare un ulteriore passo avanti e creare un alias per il nostro middleware in modo che non sia necessario utilizzare nomi di classe incorporati.

Apri il file app / Http / Kernel.php e cerca il $ routeMiddleware che contiene le mappature degli alias nel middleware. Includiamo la nostra voce in quell'elenco, come mostrato nel seguente frammento.

protected $ routeMiddleware = ['auth' => \ Illuminate \ Auth \ Middleware \ Authenticate :: class, 'auth.basic' => \ Illuminate \ Auth \ Middleware \ AuthenticateWithBasicAuth :: class, 'bindings' => \ Illuminate \ Routing \ Middleware \ SubstituteBindings :: class, 'can' => \ Illuminate \ Auth \ Middleware \ Authorize :: class, 'guest' => \ App \ Http \ Middleware \ RedirectIfAuthenticated :: class, 'throttle' => \ Illuminate \ Routing \ Middleware \ ThrottleRequests :: class, 'mobile.redirect' => \ App \ Http \ Middleware \ MobileRedirect :: class]; 

E la definizione di rotta rivista appare così.

Route :: get ('/ hello-world', 'HelloWorldController @ index') -> middleware ('mobile.redirect');

E questa è la storia della registrazione del middleware con l'applicazione Laravel. È stato piuttosto semplice, no??

In effetti, abbiamo raggiunto la fine di questo articolo e spero che ti sia piaciuto molto.

Conclusione

Esplorare il concetto architettonico in qualsiasi framework è sempre qualcosa di entusiasmante, ed è quello che abbiamo fatto in questo articolo mentre abbiamo esplorato il middleware nel framework di Laravel.

Partendo da un'introduzione di base al middleware, abbiamo spostato l'attenzione sull'argomento di creazione del middleware personalizzato in un'applicazione Laravel. Ed è stata la seconda metà dell'articolo che ha discusso su come registrare il tuo middleware personalizzato con Laravel, e questa è stata anche l'occasione per esplorare i diversi modi in cui puoi collegare il tuo middleware.

Speriamo che il viaggio sia stato fruttuoso e che l'articolo ti abbia aiutato ad arricchire le tue conoscenze. Inoltre, se vuoi che venga fuori argomenti specifici nei prossimi articoli, potresti sempre darmi una risposta a riguardo.

È tutto per oggi e non esitare a rispondere alle tue domande, se ce ne sono, utilizzando il feed qui sotto!