Opprette en enkel mellomvareklasse

Opprette en enkel mellomvareklasse

Problem

Du vil legge til mellomvare i applikasjonen din, men vet ikke hvor du skal begynne.

Løsning

Lag en enkel mellomvareklasse.

Trinn 1 - Lag klassen

Bruk Symfony \ Component \ httpFoundation \ Request;
Bruk Symfony \ Component \ httpFoundation \ Response;
Bruk Symfony \ Component \ httpkernel \ httpkernelinterface;
Klasse mellomvare implementerer httpkernelinterface
beskyttet $ app;
/**
* Konstruktør
*/
offentlig funksjon __construct (httpkernelinterface $ app)

$ this-> app = $ app;

/**
* Håndter forespørselen, returner svaret
*
* @implements httpkernelinterface :: håndtak
*
* @Param \ Symfony \ Component \ HttpFoundation \ Request $ Request
* @param int $ type
* @param bool $ fangst
* @return \ symfony \ komponent \ httpfoundation \ respons
*/
offentlig funksjonshåndtak (forespørsel $ forespørsel,
$ type = httpkernelinterface :: master_request, $ catch = true)

// 1) Endre innkommende forespørsel om nødvendig
..
// 2) kjede appbehandleren for å få responsen
$ respons = $ this-> app-> håndtak ($ ​​forespørsel, $ type, $ catch);
// 3) Endre responsen om nødvendig
..
// 4) Returner svaret
Returner $ respons;


?>

Trinn 2 - Registrer mellomvareklassen

Du må gjøre dette i registeret () -metoden til en tjenesteleverandør.

App :: Middleware ('MyApp \ Middleware');

Alternativt kan du installere en enkel pakke jeg opprettet som lar deg registrere mellomvare i app/start/preboot.PHP. Se laravel-hooks for detaljer.

Diskusjon

Ovennevnte klasse gjør ikke noe.

Men det er et godt skjelett til å begynne med. Det er klart at du må endre navneområdet og klassenavnet for å passe til søknaden din.

Da kan det være lurt å prøve å logge noe for å sikre at det fungerer. Du kan oppdatere håndtaket () -metoden i klassen din som spesifisert nedenfor.

// i trinn 1) Endre innkommende forespørsel om nødvendig
// logg til en fil. Siden app/start/global.PHP har ikke blitt truffet
// Likevel er loggfasaden satt til å logge på en fil ennå. Så bare
// Skriv direkte til en fil.
$ logfile = Storage_path ().'/logger/laravel.Logg';
error_log ("Middleware Entry \ n", 3, $ logfile);
// i trinn 3) Endre svar om nødvendig
// logg til en fil. Vi er trygge på å bruke loggfasaden nå som
// det skal settes opp i app/start/global.PHP
Logg :: Info ("Middleware Exit");

Nå kan du undersøke din App/lagring/logger/laravel.Logg fil for å se at mellomvaren fungerer.