Il Laravel 5 documentation descrive due modi di assegnazione Middleware:Esecuzione Ordine di Middleware in laravel 5
- middleware Assegnare al percorso del controller.
- Specifica il middleware all'interno del costruttore del controller.
Tuttavia, mi sono reso conto che il codice scritto nei controllori __construct()
funzione verrà eseguito prima della Middleware, anche se il Middleware è dichiarato sulla prima riga della funzione __construct
del controller.
Ho trovato uno bug report per un problema simile nel repository github di Laravel. Tuttavia un collaboratore ha chiuso il problema affermando "Questo è il comportamento previsto".
Mi chiedo che, middleware
debba essere "layer" all'esterno dell'applicazione, mentre la funzione __construct
fa parte dell'applicazione. Perché la funzione __construct
viene eseguita prima del middleware (dato che si tratta di un middleware precedente) e perché questo è previsto?
Ho appena fatto alcune prove per confermare. Se si desidera eseguire il middleware prima dei controller '__construct()' è necessario assegnare il middleware alla route. Altrimenti sarà sempre eseguito alla fine di '__construct()' anche se assegnato sulla prima riga di 'construct()'. – Jeemusu
Ho creato un breve esempio per delineare ciò che stai descrivendo, sentiti libero di aggiungerlo alla tua domanda. https://www.notehub.org/2015/6/26/say-we-have-a-controller----welcomecontr – Jeemusu
@Jeemusu Grazie per il tuo commento.Sì, ho anche scoperto questa differenza tra i due modi di assegnare il middleware. Tuttavia, posizionando il middleware alla fine del flusso di esecuzione nel costruttore, è contro il Ciclo di vita della richiesta (http://laravel.com/docs/5.1/lifecycle), poiché la richiesta di spedizione dovrebbe essere alla fine? –