Laravel 13.x — Middleware
Middleware
Built-in Middleware
Built-in middleware yang tersedia dan alias-nya.
| Alias | Middleware |
|---|---|
auth |
Illuminate\Auth\Middleware\Authenticate |
auth.basic |
Illuminate\Auth\Middleware\AuthenticateWithBasicAuth |
auth.session |
Illuminate\Session\Middleware\AuthenticateSession |
cache.headers |
Illuminate\Http\Middleware\SetCacheHeaders |
can |
Illuminate\Auth\Middleware\Authorize |
guest |
Illuminate\Auth\Middleware\RedirectIfAuthenticated |
password.confirm |
Illuminate\Auth\Middleware\RequirePassword |
precognitive |
Illuminate\Foundation\Http\Middleware\HandlePrecognitiveRequests |
signed |
Illuminate\Routing\Middleware\ValidateSignature |
subscribed |
\Spark\Http\Middleware\VerifyBillableIsSubscribed |
throttle |
Illuminate\Routing\Middleware\ThrottleRequests or Illuminate\Routing\Middleware\ThrottleRequestsWithRedis |
verified |
Illuminate\Auth\Middleware\EnsureEmailIsVerified |
Built-in Middleware Group
Grup web otomatis digunakan untuk semua route yang didefinisikan di routes/web.php.
The web Middleware Group |
|---|
Illuminate\Cookie\Middleware\EncryptCookies |
Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse |
Illuminate\Session\Middleware\StartSession |
Illuminate\View\Middleware\ShareErrorsFromSession |
Illuminate\Foundation\Http\Middleware\PreventRequestForgery |
Illuminate\Routing\Middleware\SubstituteBindings |
Grup api otomatis digunakan untuk semua route yang didefinisikan di routes/api.php.
The api Middleware Group |
|---|
Illuminate\Routing\Middleware\SubstituteBindings |
Contoh middleware
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
class EnsureTokenIsValid
{
/**
* Handle an incoming request.
*
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
*/
public function handle(Request $request, Closure $next): Response
{
if ($request->input('token') !== 'my-secret-token') {
return redirect('/home');
}
return $next($request);
}
}
- Tumpukan middleware dijalankan beruntun satu per satu.
- Untuk terus membawa parameter
$requestke langkah berikutnya, sertakan ia dalam pemanggilan callback$next.
Middleware dikerjakan sebelum eksekusi lainnya
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
class BeforeMiddleware
{
public function handle(Request $request, Closure $next): Response
{
// Perform action
return $next($request);
}
}
Middleware dikerjakan setelah eksekusi lainnya
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
class AfterMiddleware
{
public function handle(Request $request, Closure $next): Response
{
$response = $next($request);
// Perform action
return $response;
}
}
Global middleware - register
Global middleware dijalankan untuk setiap HTTP request. Didaftarkan di bootstrap/app.php, pakai method append
use App\Http\Middleware\EnsureTokenIsValid;
->withMiddleware(function (Middleware $middleware): void {
$middleware->appendclass;
})
Global middleware - mengelola default
Pakai method use:
->withMiddleware(function (Middleware $middleware): void {
$middleware->use([
\Illuminate\Foundation\Http\Middleware\InvokeDeferredCallbacks::class,
// \Illuminate\Http\Middleware\TrustHosts::class,
\Illuminate\Http\Middleware\TrustProxies::class,
\Illuminate\Http\Middleware\HandleCors::class,
\Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance::class,
\Illuminate\Http\Middleware\ValidatePostSize::class,
\Illuminate\Foundation\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
]);
})
Menggunakan middleware di route
Pakai 1 middleware di 1 route:
use App\Http\Middleware\EnsureTokenIsValid;
Route::get('/profile', function () {
// ...
})->middlewareclass;
Pakai 1+ middleware di 1 route:
Route::get('/', function () {
// ...
})->middlewareclass, Second::class];
Pakai middleware di beberapa route, dengan pengecualian:
use App\Http\Middleware\EnsureTokenIsValid;
Route::middlewareclass])->group(function ( {
Route::get('/', function () {
// ...
});
Route::get('/profile', function () {
// ...
})->withoutMiddlewareclass];
});
use App\Http\Middleware\EnsureTokenIsValid;
Route::withoutMiddlewareclass])->group(function ( {
Route::get('/profile', function () {
// ...
});
});
Grup Middleware
Mengelompokkan middleware dalam satu nama key
Nama key ini bersifat seperti alias bagi grup middleware.
Di bootstrap/app.php:
use App\Http\Middleware\First;
use App\Http\Middleware\Second;
->withMiddleware(function (Middleware $middleware): void {
$middleware->appendToGroup('group-name', [
First::class,
Second::class,
]);
$middleware->prependToGroup('group-name', [
First::class,
Second::class,
]);
})
Menambahkan middleware ke built-in group middleware
Menggunakan append atau prepend ke built-in group middleware (web atau api) untuk menambahkan middleware ke dalam group middleware.
Di bootstrap/app.php:
use App\Http\Middleware\EnsureTokenIsValid;
use App\Http\Middleware\EnsureUserIsSubscribed;
->withMiddleware(function (Middleware $middleware): void {
$middleware->web(append: [
EnsureUserIsSubscribed::class,
]);
$middleware->api(prepend: [
EnsureTokenIsValid::class,
]);
})
Replace middleware group
Di bootstrap/app.php:
use App\Http\Middleware\StartCustomSession;
use Illuminate\Session\Middleware\StartSession;
$middleware->web(replace: [
StartSession::class => StartCustomSession::class,
]);
Remove a middleware from group
Menghapus middleware dari middleware group
$middleware->web(remove: [
StartSession::class,
]);
Mengelola bult-inmiddleware group manually
->withMiddleware(function (Middleware $middleware): void {
$middleware->group('web', [
\Illuminate\Cookie\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\Illuminate\Foundation\Http\Middleware\PreventRequestForgery::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
]);
$middleware->group('api', [
// \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
// 'throttle:api',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
]);
})
Artisan
Membuat middleware
php artisan make:middleware EnsureTokenIsValid
EnsureTokenIsValidclass dibuat di direktori/app/Http/Middleware