I ganci sono davvero inclusi dal middleware di Slim Framework?

0

Ho utilizzato Slim Framework (v2) per un po 'di tempo per sviluppare il mio sistema di gestione degli utenti.

Recentemente hanno pubblicato Slim 3 e in base alla guida all'aggiornamento ,

Slim v3 no longer has the concept of hooks. Hooks were removed as they duplicate the functionality already present in middlewares. You should be able to easily convert your Hook code into Middleware code.

Non sono abbastanza sicuro se ci credo. Il middleware di Slim consente di modificare la richiesta prima che colpisca l'applicazione principale o di modificare la risposta prima che sia inviato al cliente.

Tuttavia, questo non dice nulla di modificare il comportamento dell'applicazione stessa, che i ganci possono fare facilmente: l'applicazione semplicemente anticipa i punti nel codice in cui qualcuno potrebbe voler modificare il comportamento e chiama applyHook di conseguenza.

Da quello che posso dire, l'unico modo per modificare il comportamento di base di un'applicazione tramite middleware è tramite le eccezioni: il middleware genera un'eccezione, che viene catturata dall'applicazione principale e quindi fa qualcos'altro. Ma questo mi sembra un abuso del framework, e ho difficoltà a credere che questo è ciò che intendono.

Gli hook in realtà "duplicano la funzionalità già presente nei middleware"?

    
posta alexw 24.09.2015 - 18:29
fonte

2 risposte

1

A quanto pare, la mia comprensione della parola "hook" (e il mio uso degli hook in Slim 2) è diversa da quella degli sviluppatori di Slim. Apparentemente, gli sviluppatori non erano nemmeno consapevoli che le persone usavano gli hook per modificare il comportamento in punti arbitrari del codice - l'ipotesi era che le persone usassero solo gli hook di default slim.before.* e slim.after.* , che sono in effetti facilmente sostituibili con il middleware.

La mia comprensione della parola "hook" era qualcosa come quella di hook di Wordpress , che dovrebbe essere davvero chiamato "event dispatcher". In realtà, questo è ciò che la maggior parte dei framework reali chiama:

Quindi la semplice risposta a questa domanda è "no".

La risposta più complicata è che i ganci di Slim non sono mai stati pensati per essere usati come dispatcher di eventi generici. Dovevano essere usati per le situazioni specifiche di iniezione del codice prima o dopo la gestione della rotta. Poiché il middleware lo gestisce già, la funzione di aggancio di Slim è stata considerata ridondante.

Naturalmente, nella vita reale, le persone a volte hanno bisogno di fornire punti arbitrari nel loro codice (come nel mezzo di una rotta) dove le persone possono iniettare codice aggiuntivo. Slim v3 non supporta questo, perché Slim dovrebbe essere un framework minimale, barebone. Pertanto, la raccomandazione corrente è di utilizzare un dispatcher di eventi di terze parti, ad esempio uno dei componenti elencati sopra, per ottenere ciò.

    
risposta data 29.03.2016 - 05:06
fonte
2

Dalla mia comprensione degli hook questo è vero. Il modo in cui ho capito che è possibile eseguire del codice in un punto predefinito durante il flusso di esecuzione. Successivamente l'applicazione continua come se nulla fosse accaduto. Questo è molto astratto quindi vorrei esprimere questo usando un esempio:

Diciamo che è possibile eseguire codice quando si incontra un hook before_authentication . Forse vorresti inizializzare le sessioni prima dell'autenticazione e quindi farei questo qui. Questo può essere fatto anche attraverso il middleware.

Diciamo che hai un componente middleware che gestisce l'autenticazione. Ogni middleware è definito all'interno di un array e viene eseguito nell'ordine definito. Dovresti quindi inserire il tuo componente InitializeSessionMiddleware appena prima che AuthenticationMiddleware sia definito nella matrice.

Entrambe queste soluzioni funzionerebbero, ma poiché Slim (AFAIK) è molto focalizzato su HTTP, sarebbe più appropriato scrivere questo come middleware.

Tieni presente che questa è la mia comprensione di midddleware e hook. Se si desidera modificare il modo in cui l'applicazione funziona in punti predefiniti, vorrei esaminare alcuni richiami, che hanno una struttura predefinita (interfaccia?) Unica per quel punto specifico. Questo callback potrebbe essere cambiato se la struttura è corretta.

Spero che questo possa aiutarti, felice codifica.

    
risposta data 24.09.2015 - 19:17
fonte

Leggi altre domande sui tag