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

Метод terminate

Метод terminate применяется в middleware Laravel и вызывается автоматически после того, как HTTP-ответ был отправлен браузеру. Это позволяет выполнять ресурсоёмкие операции, не замедляя ответ сервера. Метод принимает два параметра: объект запроса Request и объект ответа Response.

Синтаксис

<?php public function terminate($request, $response) { // завершающий код } ?>

Пример

Давайте создадим middleware, который логирует время выполнения запроса:

<?php namespace AppHttpMiddleware; use Closure; use IlluminateHttpRequest; class LogExecutionTime { public function handle(Request $request, Closure $next) { $request->startTime = microtime(true); return $next($request); } public function terminate($request, $response) { $executionTime = microtime(true) - $request->startTime; $logMessage = "Request took " . round($executionTime, 4) . " seconds"; error_log($logMessage); } } ?>

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

"Request took 0.0235 seconds"

Пример

Давайте отправим уведомление администратору после завершения запроса:

<?php namespace AppHttpMiddleware; use Closure; use IlluminateHttpRequest; use AppServicesNotificationService; class NotifyAdmin { protected $notifier; public function __construct(NotificationService $notifier) { $this->notifier = $notifier; } public function handle(Request $request, Closure $next) { return $next($request); } public function terminate($request, $response) { if ($response->status() >= 500) { $this->notifier->sendAlert( "Server error occurred", "Error: " . $response->status() ); } } } ?>

Пример

Давайте запишем в базу данных статистику посещений страниц:

<?php namespace AppHttpMiddleware; use Closure; use IlluminateHttpRequest; use AppModelsPageView; class PageStatistics { public function handle(Request $request, Closure $next) { return $next($request); } public function terminate($request, $response) { PageView::create([ 'url' => $request->fullUrl(), 'method' => $request->method(), 'ip' => $request->ip(), 'status' => $response->status(), 'user_agent' => $request->userAgent() ]); } } ?>

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

"Page view recorded successfully"

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

  • метод handle,
    который выполняется до отправки ответа клиенту
  • класс Request,
    который представляет HTTP-запрос
  • класс Response,
    который представляет HTTP-ответ
  • директива throttle,
    которая ограничивает количество запросов
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить