РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
515 of 1392 menu

Метод handle

Метод handle является основным методом любого middleware в Laravel. Он принимает объект запроса и замыкание, которое передаёт запрос дальше по цепочке middleware. Метод может выполнять проверки, изменять запрос или прерывать выполнение, возвращая ответ. Первым параметром передаётся объект Request, вторым - замыкание next.

Синтаксис

<?php namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; class ExampleMiddleware { public function handle(Request $request, Closure $next) { // Действия до выполнения запроса $response = $next($request); // Действия после выполнения запроса return $response; } } ?>

Пример 1

Создадим middleware, которое проверяет наличие заголовка 'X-API-Key' и возвращает ошибку, если ключ отсутствует:

<?php namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; use Symfony\Component\HttpFoundation\Response; class CheckApiKey { public function handle(Request $request, Closure $next): Response { $apiKey = $request->header('X-API-Key'); if ($apiKey !== 'secret-key-123') { return response()->json([ 'error' => 'Invalid API key' ], 401); } return $next($request); } } ?>

Результат выполнения кода при неверном ключе:

{"error": "Invalid API key"}

Пример 2

Создадим middleware, которое добавляет заголовок к ответу после обработки запроса:

<?php namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; use Symfony\Component\HttpFoundation\Response; class AddCustomHeader { public function handle(Request $request, Closure $next): Response { $response = $next($request); $response->headers->set('X-Processing-Time', microtime(true)); return $response; } } ?>

Пример 3

Создадим middleware, которое логирует информацию о запросе и перенаправляет пользователя, если запрос выполняется из определённого IP-адреса:

<?php namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; use Illuminate\Support\Facades\Log; use Symfony\Component\HttpFoundation\Response; class BlockIpAddress { protected $blockedIps = ['192.168.1.100', '10.0.0.5']; public function handle(Request $request, Closure $next): Response { $ip = $request->ip(); Log::info('Request from IP: ' . $ip); if (in_array($ip, $this->blockedIps)) { return redirect('/blocked'); } return $next($request); } } ?>

Смотрите также

  • метод terminate,
    который выполняется после отправки ответа клиенту
  • метод throttle,
    который ограничивает количество запросов
  • метод signed,
    который проверяет подпись URL
  • метод ValidateCsrfToken,
    который проверяет CSRF-токен
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить