Laravel - Middleware: Your Gateway to Request Handling

Привет, будущие разработчики Laravel! Сегодня мы окунемся в fascинирующий мир Middleware Laravel. Представьте middleware как полезного охранника для вашего приложения - он проверяет и обрабатывает запросы перед тем, как они достигнут основной логики вашего приложения. Давайте отправимся в это увлекательное путешествие вместе!

Laravel - Middleware

Что такое Middleware?

Прежде чем перейти к коду, давайте поймем, что такое middleware. Представьте, что вы举办ите вечеринку (ваше приложение), и у вас естьouncer (middleware) у входа. Этотouncer может:

  1. Проверить, входят ли люди в список гостей (аутентификация)
  2. Убедиться, что они одеты подходяще (валидация)
  3. Дать им браслет (добавить информацию в запрос)
  4. Или даже не пускать их (прекратить запрос)

Вот что делает middleware для вашего приложения Laravel!

Регистрация Middleware

Теперь давайте посмотрим, как мы можем создать и зарегистрировать свой собственный middleware.

Создание Middleware

Сначала создадим простой middleware, который проверяет, достиг ли пользователь 18 лет:

<?php

namespace App\Http\Middleware;

use Closure;

class CheckAge
{
public function handle($request, Closure $next)
{
if ($request->age <= 18) {
return redirect('home');
}

return $next($request);
}
}

В этом примере наш CheckAge middleware проверяет, достиг ли параметр age в запросе 18 лет. Если нет, то перенаправляет на главную страницу. В противном случае передает запрос следующему middleware или в основное приложение.

Регистрация глобального Middleware

Чтобы использовать этот middleware глобально (для всех маршрутов), нужно зарегистрировать его в файле app/Http/Kernel.php:

protected $middleware = [
// ...
\App\Http\Middleware\CheckAge::class,
];

Регистрация маршрута Middleware

Если вы хотите использовать middleware только для определенных маршрутов, можно зарегистрировать его как маршруточный middleware:

protected $routeMiddleware = [
// ...
'checkage' => \App\Http\Middleware\CheckAge::class,
];

Затем вы можете использовать его в своих маршрутах следующим образом:

Route::get('adult-only', function () {
//
})->middleware('checkage');

Параметры Middleware

Иногда мы хотим, чтобы наш middleware был более гибким. Вот где на помощь приходят параметры middleware!

Давайте изменим наш CheckAge middleware, чтобы он принимал параметр минимального возраста:

<?php

namespace App\Http\Middleware;

use Closure;

class CheckAge
{
public function handle($request, Closure $next, $minAge)
{
if ($request->age <= $minAge) {
return redirect('home');
}

return $next($request);
}
}

Теперь мы можем использовать этот middleware с различными возрастными ограничениями:

Route::get('adult-only', function () {
//
})->middleware('checkage:18');

Route::get('senior-only', function () {
//
})->middleware('checkage:65');

Не schlecht! Мы сделали наш middleware многоразовым для различных сценариев!

Terminable Middleware

Иногда мы хотим, чтобы наш middleware что-то делал после отправки ответа в браузер. Вот где на помощь приходит terminable middleware!

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

<?php

namespace App\Http\Middleware;

use Closure;

class LogResponseTime
{
public function handle($request, Closure $next)
{
$request->start_time = microtime(true);

return $next($request);
}

public function terminate($request, $response)
{
$duration = microtime(true) - $request->start_time;
\Log::info('Response time: ' . $duration . ' seconds');
}
}

Этот middleware добавляет start_time к запросу, а затем логирует общее время ответа после отправки ответа.

Чтобы использовать terminable middleware, убедитесь, что он зарегистрирован в вашем файле app/Http/Kernel.php:

protected $middleware = [
// ...
\App\Http\Middleware\LogResponseTime::class,
];

Методы Middleware

Вот таблица основных методов, которые вы будете использовать при работе с middleware:

Метод Описание
handle() Основная логика middleware. Обрабатывает запрос и optionally передает его в следующий middleware.
terminate() Выполняется после отправки ответа в браузер. Используется для очистки или логирования.

Заключение

И вот оно, друзья! Мы совершили путешествие по земле Laravel Middleware, от создания и регистрации middleware до использования параметров и terminable middleware. Помните, middleware - это как швейцарский армейский нож обработки запросов - он универсален, мощен и является незаменимым инструментом в вашем арсенале Laravel.

Продолжая свое приключение с Laravel, вы найдете множество творческих способов использования middleware. Может быть, вы создадите middleware для проверки режима обслуживания, логирования запросов или даже преобразования данных запроса. Возможности безграничны!

Продолжайте программировать, продолжайте учиться и, самое главное, получайте удовольствие! До下一次 встречи, счастливого Laravel-инга!

Credits: Image by storyset