{"id":414,"date":"2026-05-08T17:45:45","date_gmt":"2026-05-08T17:45:45","guid":{"rendered":"https:\/\/piotrswitlicki.pl\/?p=414"},"modified":"2026-05-08T17:45:52","modified_gmt":"2026-05-08T17:45:52","slug":"middleware-w-laravel-czym-jest-i-jak-dziala","status":"publish","type":"post","link":"https:\/\/piotrswitlicki.pl\/pl\/2026\/05\/08\/middleware-w-laravel-czym-jest-i-jak-dziala\/","title":{"rendered":"Middleware w Laravel \u2013 czym jest i jak dzia\u0142a?"},"content":{"rendered":"\nMiddleware to jeden z najwa\u017cniejszych mechanizm\u00f3w w Laravel oraz nowoczesnych frameworkach backendowych.<br>Pozwala kontrolowa\u0107 request zanim dotrze do aplikacji lub kontrolera.<br>Najpro\u015bciej m\u00f3wi\u0105c:<br>Middleware dzia\u0142a jak filtr lub warstwa po\u015brednia pomi\u0119dzy requestem u\u017cytkownika a logik\u0105 aplikacji.<br>Middleware mo\u017ce:<br>przepu\u015bci\u0107 request dalej,<br>zmodyfikowa\u0107 request,<br>zatrzyma\u0107 request,<br>zwr\u00f3ci\u0107 odpowied\u017a wcze\u015bniej.<br><br>Jak dzia\u0142a middleware?<br>Schemat wygl\u0105da mniej wi\u0119cej tak:<br><br><code>User Request<br>\u2193<br>Middleware<br>\u2193<br>Controller \/ Application Logic<br>\u2193<br>Response<\/code><br><br>Ka\u017cde \u017c\u0105danie HTTP mo\u017ce przechodzi\u0107 przez wiele middleware jednocze\u015bnie.<br><br>Przyk\u0142ad middleware w Laravel<br>Najcz\u0119\u015bciej spotykany przyk\u0142ad to autoryzacja u\u017cytkownika:<br><br><code>public function handle($request, Closure $next)<br>{<br>if (!auth()->check()) {<br>return redirect('\/login');<br>}<br><br>return $next($request);<br>}<\/code><br><br><br>Co tutaj si\u0119 dzieje?<br>1. Request trafia do middleware<br>Laravel przechwytuje request zanim uruchomi kontroler.<br><br>2. Middleware sprawdza warunek<br><br><code>auth()->check()<\/code><br><br>sprawdza czy u\u017cytkownik jest zalogowany.<br><br>3. Je\u015bli u\u017cytkownik NIE jest zalogowany<br>Middleware zatrzymuje request:<br><br><code>return redirect('\/login');<\/code><br><br>i u\u017cytkownik trafia na stron\u0119 logowania.<br><br>4. Je\u015bli u\u017cytkownik jest zalogowany<br>Request przechodzi dalej:<br><br><code>return $next($request);<\/code><br><br><code>$next()<\/code> przekazuje request do kolejnego middleware lub kontrolera.<br><br>Do czego u\u017cywa si\u0119 middleware?<br>Middleware jest u\u017cywany praktycznie w ka\u017cdej wi\u0119kszej aplikacji Laravel.<br><br>1. Authentication (auth)<br>Najpopularniejsze zastosowanie.<br>Sprawdzanie:<br>czy u\u017cytkownik jest zalogowany,<br>czy token JWT jest poprawny,<br>czy sesja istnieje.<br>Przyk\u0142ad:<br><br><code>Route::middleware('auth')->group(function () {<br>Route::get('\/dashboard', ...);<br>});<\/code><br><br><br>2. Authorization \/ Role permissions<br>Sprawdzanie:<br>admin,<br>moderator,<br>premium user,<br>dost\u0119p do zasob\u00f3w.<br>Przyk\u0142ad:<br><br><code>if (!auth()->user()->is_admin) {<br>abort(403);<br>}<\/code><br><br><br>3. Rate Limiting<br>Ograniczanie liczby request\u00f3w.<br>Bardzo wa\u017cne dla:<br>API,<br>logowania,<br>ochrony przed brute-force,<br>ochrony przed spamem.<br>Laravel posiada wbudowany rate limiter.<br><br>4. Logowanie request\u00f3w<br>Middleware \u015bwietnie nadaje si\u0119 do:<br>logowania request\u00f3w API,<br>analizy b\u0142\u0119d\u00f3w,<br>monitoringu,<br>debugowania produkcji.<br>Przyk\u0142ad:<br><br><code>Log::info($request->fullUrl());<\/code><br><br><br>5. Ustawianie nag\u0142\u00f3wk\u00f3w HTTP<br>Np:<br>CORS,<br>cache headers,<br>security headers.<br><br>6. API Security<br>Middleware cz\u0119sto obs\u0142uguje:<br>API tokens,<br>JWT,<br>OAuth,<br>CSRF,<br>firewall logic.<br><br>7. Localization<br>Zmiana j\u0119zyka aplikacji na podstawie:<br>nag\u0142\u00f3wka,<br>kraju,<br>ustawie\u0144 u\u017cytkownika.<br><br>8. Maintenance Mode<br>Middleware mo\u017ce blokowa\u0107 dost\u0119p podczas maintenance.<br><br>Middleware globalny vs route middleware<br>Laravel pozwala u\u017cywa\u0107 middleware na r\u00f3\u017cnych poziomach.<br><br>Global Middleware<br>Dzia\u0142a dla ka\u017cdego requestu.<br>Plik:<br><br><code>app\/Http\/Kernel.php<\/code><br><br>Przyk\u0142ad:<br>CORS<br>sessions<br>trimming input<br><br>Route Middleware<br>Dzia\u0142a tylko dla wybranych endpoint\u00f3w.<br>Przyk\u0142ad:<br><br><code>Route::middleware('auth')->get('\/dashboard', function () {<br>\/\/<br>});<\/code><br><br><br>Middleware Groups<br>Laravel pozwala grupowa\u0107 middleware.<br>Np grupa:<br><br><code>web<\/code><br><br>lub:<br><br><code>api<\/code><br><br><br>Jak stworzy\u0107 w\u0142asny middleware?<br>Laravel posiada generator Artisan:<br><br><code>php artisan make:middleware CheckAdmin<\/code><br><br>Plik pojawi si\u0119 w:<br><br><code>app\/Http\/Middleware<\/code><br><br><br>Rejestracja middleware<br>Middleware dodaje si\u0119 w:<br><br><code>app\/Http\/Kernel.php<\/code><br><br><br>Przyk\u0142ad w\u0142asnego middleware<br><br><code>public function handle($request, Closure $next)<br>{<br>if (!auth()->user()->is_admin) {<br>abort(403);<br>}<br><br>return $next($request);<br>}<\/code><br><br><br>Najcz\u0119stszy b\u0142\u0105d pocz\u0105tkuj\u0105cych<br>Wrzucanie logiki biznesowej do middleware<br>Middleware NIE powinien:<br>tworzy\u0107 zam\u00f3wie\u0144,<br>wykonywa\u0107 logiki domenowej,<br>liczy\u0107 biznesowych danych,<br>wykonywa\u0107 ci\u0119\u017ckich operacji.<br>Middleware powinien:<br>filtrowa\u0107,<br>walidowa\u0107,<br>kontrolowa\u0107 przep\u0142yw requestu.<br><br>Z\u0142a praktyka<br><br><code>public function handle($request, Closure $next)<br>{<br>Order::create([...]);<br><br>return $next($request);<br>}<\/code><br><br><br>Dobra praktyka<br>Middleware:<br>sprawdza dost\u0119p,<br>waliduje request,<br>kontroluje bezpiecze\u0144stwo.<br>A logika biznesowa trafia do:<br>Service classes,<br>Controllers,<br>Domain layer,<br>Jobs,<br>Actions.<br><br>Middleware a wydajno\u015b\u0107<br>Ka\u017cdy request przechodzi przez middleware.<br>Dlatego middleware powinny by\u0107:<br>lekkie,<br>szybkie,<br>dobrze zoptymalizowane.<br>\u0179le napisane middleware mo\u017ce spowolni\u0107 ca\u0142\u0105 aplikacj\u0119.<br><br>Middleware w nowoczesnych aplikacjach<br>Middleware jest podstaw\u0105:<br>Laravel API,<br>system\u00f3w SaaS,<br>aplikacji mobilnych,<br>mikroserwis\u00f3w,<br>system\u00f3w CRM,<br>aplikacji enterprise.<br><br>Middleware w API-first Architecture<br>W architekturze API-first middleware cz\u0119sto odpowiada za:<br>autoryzacj\u0119 token\u00f3w,<br>rate limiting,<br>versioning API,<br>monitoring,<br>logowanie request\u00f3w,<br>security layers.<br><br>Podsumowanie<br>Middleware w Laravel to warstwa po\u015brednia kontroluj\u0105ca requesty HTTP zanim trafi\u0105 do logiki aplikacji.<br>To jeden z najwa\u017cniejszych mechanizm\u00f3w backendowych pozwalaj\u0105cych budowa\u0107:<br>bezpieczne aplikacje,<br>skalowalne API,<br>kontrol\u0119 dost\u0119pu,<br>monitoring,<br>zabezpieczenia systemowe.<br>Dobrze zaprojektowane middleware:<br>upraszcza architektur\u0119,<br>poprawia bezpiecze\u0144stwo,<br>zwi\u0119ksza czytelno\u015b\u0107 aplikacji,<br>pozwala lepiej kontrolowa\u0107 przep\u0142yw request\u00f3w.<br>Najwa\u017cniejsze jednak jest zachowanie odpowiedzialno\u015bci middleware \u2014 powinno ono filtrowa\u0107 i kontrolowa\u0107 request, a nie przejmowa\u0107 logik\u0119 biznesow\u0105 aplikacji.\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"pagelayer_contact_templates":[],"_pagelayer_content":"","footnotes":""},"categories":[1],"tags":[],"class_list":["post-414","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"acf":[],"_links":{"self":[{"href":"https:\/\/piotrswitlicki.pl\/pl\/wp-json\/wp\/v2\/posts\/414","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/piotrswitlicki.pl\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/piotrswitlicki.pl\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/piotrswitlicki.pl\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/piotrswitlicki.pl\/pl\/wp-json\/wp\/v2\/comments?post=414"}],"version-history":[{"count":1,"href":"https:\/\/piotrswitlicki.pl\/pl\/wp-json\/wp\/v2\/posts\/414\/revisions"}],"predecessor-version":[{"id":415,"href":"https:\/\/piotrswitlicki.pl\/pl\/wp-json\/wp\/v2\/posts\/414\/revisions\/415"}],"wp:attachment":[{"href":"https:\/\/piotrswitlicki.pl\/pl\/wp-json\/wp\/v2\/media?parent=414"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/piotrswitlicki.pl\/pl\/wp-json\/wp\/v2\/categories?post=414"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/piotrswitlicki.pl\/pl\/wp-json\/wp\/v2\/tags?post=414"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}