Middleware
Middleware, HTTP isteklerini filtrelemek için kullanılır. İstek controller'a ulaşmadan önce veya response gönderilmeden önce işlem yapabilir.
Middleware Oluşturma
php artisan make:middleware CheckAge
age < $minAge) {
return redirect('home')->with('error', 'Yaş yeterli değil!');
}
return $next($request); // Sonraki middleware'e/controller'a geç
}
}
// After Middleware
class LogResponse
{
public function handle(Request $request, Closure $next)
{
$response = $next($request);
// Response oluştuktan sonra
Log::info('Response status: ' . $response->status());
return $response;
}
}
Middleware Kaydetme (Laravel 11+)
// bootstrap/app.php
use App\Http\Middleware\CheckAge;
return Application::configure(basePath: dirname(__DIR__))
->withRouting(
web: __DIR__.'/../routes/web.php',
api: __DIR__.'/../routes/api.php',
)
->withMiddleware(function (Middleware $middleware) {
// Global middleware
$middleware->append(LogRequests::class);
// Alias (route'larda kullanmak için)
$middleware->alias([
'age' => CheckAge::class,
'admin' => EnsureUserIsAdmin::class,
]);
// Grup middleware
$middleware->group('admin', [
'auth',
'admin',
]);
})
->create();
Middleware Kullanımı
// Tek route
Route::get('/adult-content', function () {
// ...
})->middleware('age:21');
// Birden fazla
Route::get('/profile', function () {
// ...
})->middleware(['auth', 'verified']);
// Grup
Route::middleware(['auth', 'admin'])->group(function () {
Route::get('/admin/dashboard', [AdminController::class, 'dashboard']);
Route::get('/admin/users', [AdminController::class, 'users']);
});
// Controller'da
class AdminController extends Controller
{
public function __construct()
{
$this->middleware('auth');
$this->middleware('admin')->except('index');
$this->middleware('log')->only('store');
}
}
Yaygın Middleware Örnekleri
// Admin kontrolü
class EnsureUserIsAdmin
{
public function handle(Request $request, Closure $next)
{
if (!$request->user()?->isAdmin()) {
abort(403, 'Yetkisiz erişim');
}
return $next($request);
}
}
// Locale ayarlama
class SetLocale
{
public function handle(Request $request, Closure $next)
{
$locale = $request->header('Accept-Language', 'tr');
app()->setLocale($locale);
return $next($request);
}
}
// Maintenance mode bypass
class CheckForMaintenanceMode
{
public function handle(Request $request, Closure $next)
{
if (app()->isDownForMaintenance()) {
if (!in_array($request->ip(), config('maintenance.allowed_ips'))) {
abort(503);
}
}
return $next($request);
}
}
Önemli Noktalar
- Middleware HTTP request/response filtresidir
- Global, route ve group middleware türleri var
- php artisan make:middleware ile oluşturulur
- bootstrap/app.php'de kaydedilir
- Before ve after middleware pattern'leri