Despre middleware-uri in laravel

postat acum 8 luni de Stefanescu Mihai in categorie iNoob

HTTP Middleware este un mecanism ce ne ajuta la filtrarea cererilor HTTP de a ajunge in aplicatia ta. In Laravel, de exemplu avem un middleware ce ne ajuta sa verificam daca un utlizator este autentificat.

La ce putem folosi Middleware

Iata unde va poate fi de folos un middleware. 

  • Daca lucrati la un api puteti face un middleware pentru a confirma  API key-ul
  • Putem schimba limba site-ului in functie de zona in care ne aflam
  • Putem porni modul de maintanance

La sfarsitul acestui articol ve-ti avea idee cum puteti crea un middleware si cum il puteti folosi in proiectul vostru. Pentru a va ajuta sa inetlegeti un middleware am sa fac impreuna cu voi un middleware ce va afisa un mesaj de mentenanta pe tot site-ul sau numai pe anumite rute.

Crearea unui middleware

Cu ajutorul artisan putem face un middlware foarte simplu, tot ce trebuie sa facem este sa deschidem un terminal si sa scriuem urmatoarea comanda:

php artisan make:middleware [nume middleware]

Aceasta comanda va crea un fisier nou in app/Http/Middleware.

Iata comanda executata de mine:

php artisan make:middleware DownForMaintenance

Acum putem deschide fisierul middleware si putem adauga codul. Primul lucru pe care trebuie sa-l facem este sa importam HttpException astfel:

use Symfony\Component\HttpKernel\Exception\HttpException;

In metoda handle a middleware-ului putem adauga acest cod:

public function handle($request, Closure $next){ 
    throw new HttpException(503);
}

Aruncand aceasta exceptie laravel va afisa view-ul 503.blade.php care ar trebuii sa le afiseze un mesaj cum ca site-ul este in mentenanta.

Inregistrarea unui Middleware

Acum ca am creat un middleware trebuie sa anuntam si apicatia despre existenta acestuia. Daca doriti ca acest middleware sa poata fi folosit  la fiecare request intrati in app/Http/kernel.php si adaugati  urmatorul cod in array-ul $middleware:

'down.for.maintenance' => \App\Http\Middleware\DownForMaintenance::class,

Atasarea unu middleware unei rute

Stim deja cum arata o ruta:

Route::get('posts/{parametru}', '[email protected]');

Metoda getPost din controller-ul PostController este rulata atunci cand este accesat link-ul posts/{parametru}

Putem adauga acest middleware rutei schimband ce-l de-al doilea parametru din string in array astfel:

Route::get('posts/{parametru}', ['middleware' => 'grown.ups.only', function () { return "NU! Nu vreau sa vezi aceasat pagina!";}]);

Acum daca cineva acceseaza ruta posts/{parametru} nu va mai ajunge in controller, ci va putea sa vada numai o pagina cu un mesaj.

Parametri in middleware

Pasarea de parametri unui middleware este destul de simpla. De exemplu, poate dorim sa verificam ce rol are utilizatorul care a accesat aceasta ruta, putem pasa atat un rol cat si o lista cu toate rolurile.

Pentru a pasa un parametru unui middleware,dupa $request si Closure adauga variabila ce dorim sa fie preluata ca parametru:

public function handle($request, Closure $next, $role){ 
    if (! $request->user()->hasRole($role)) { 
              // Redirect... 
    } 
    return $next($request);
}

Pentru a pasa o variabila cand atasam un middleware unei rute facem astfel:

Route::put('post/{id}', ['middleware' => 'role:editor', function ($id) { //}]);

Concluzie

In acest articol am vorbit numai despre un mod in care poate fi folosit un middleware, de fapt le puteti folosi intr-o multume de moduri.

Pentru orice nelamurire puteti lasa un comentariu mai jos sau puteti posta pe forum aici: http://www.invata-programare.ro/forums/topic/despre_middleware_in_framework-ul_laravel

Sunt un tanar programator din Bucuresti ce lucreaza in PHP/Mysql (MySqli/PDO), Laravel, CodeIgniter, MySQL, PostgreSQL, Wordpress, HTML5/CSS3, Sass, Photoshop si multe altele.
Google+ Community Facebook Group
Comentariu postate de Exe Packer la data de 16.02.2017
Hello, I enjoy reading all of your article. I wanted to write a little comment to support you. http://www.webtoolmaster.com/fr/index.htm
Comentariu postate de filme romantico gospel la data de 18.02.2017
Another way to permanently terminate a romance with Jack or Miranda is to complete both their loyalty missions without having enough Paragon points or Renegade points to avoid siding with one or the other of them. http://Romances.Blogbaker.com/
Comentariu postate de Ilisei Cristian la data de 20.02.2017
salut , incerc sa fac un site laravel si nu reusesc sa fac sa fie in 2 limbi ( ro & en ) , vreau ca implicit limba sa fie romana, mentionez ca lucrez pe laravel 5.0 deoarece easyphp-ul in care lucrez nu-mi da voie sa folosesc laravel 5.4 . Ma puteti ajuta ? va multumesc
Comentariu postate de phone psychic reading la data de 22.02.2017
Very awesome post, i certainly love this site, keep writing.
Comentariu postate de free psychic reading hotline la data de 22.02.2017
You have noted terribly attention-grabbing things. Thanks for sharing.
Comentariu postate de phone psychic reading la data de 22.02.2017
This short article gives the light in which we can observe the reality. This is a very nice one and gives in-depth information. Thank you for this nice article.
Comentariu postate de Alonzo la data de 24.02.2017
I am sure this paragraph has touched all the internet people, its really really good piece of writing on building up new webpage. https://ashliduerr30147.wordpress.com/2016/12/29/warning-monster-truck-games/
Comentariu postate de beneficios de goji berry la data de 24.02.2017
Many customers have heard that Goji berries have very high antioxidant content, so they ask me, Do Goji berries have a lot of antioxidants?” After all, antioxidants are well-known for slowing down the aging process. http://star-crossed.or.kr/phpnuke/html/modules.php?name=Your_Account&op=userinfo&username=Ryder22I65