Команда make:middleware
Команда make:middleware генерирует новый класс посредника
в директории app/Http/Middleware. Посредники выполняют
проверку HTTP-запросов до того, как они достигнут контроллера,
или после формирования ответа. Команда принимает один обязательный
параметр - имя класса посредника в формате CamelCase.
Синтаксис
php artisan make:middleware ClassName
Пример
Создадим посредник для проверки возраста пользователя:
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
class CheckAge
{
public function handle(Request $request, Closure $next, int $age): Response
{
if ($request->input('age') < $age) {
abort(403, 'Access denied');
}
return $next($request);
}
}
?>
Команда создаёт файл с заготовкой класса. Метод handle
принимает текущий запрос, замыкание для передачи управления
дальше и дополнительные параметры. Если условие не выполняется,
возвращается ошибка, иначе запрос передаётся следующему посреднику.
Пример
Создадим посредник для проверки наличия заголовка API-ключа:
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
class ApiKeyAuth
{
public function handle(Request $request, Closure $next): Response
{
$apiKey = $request->header('X-API-KEY');
if (!$apiKey || $apiKey !== config('app.api_key')) {
abort(401, 'Unauthorized');
}
return $next($request);
}
}
?>
Пример
Создадим посредник для логирования всех входящих запросов:
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Log;
class LogRequests
{
public function handle(Request $request, Closure $next): Response
{
$method = $request->method();
$url = $request->fullUrl();
Log::info("{$method} {$url}");
return $next($request);
}
}
?>
После создания посредника его необходимо зарегистрировать
в файле app/Http/Kernel.php. Для глобальных посредников
используется свойство $middleware, а для назначения
отдельным маршрутам - свойство $routeMiddleware.
Пример
Регистрация посредника для маршрутов в файле ядра:
<?php
namespace App\Http;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel
{
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'age' => \App\Http\Middleware\CheckAge::class,
'api_key' => \App\Http\Middleware\ApiKeyAuth::class,
];
}
?>
Теперь посредника можно использовать в маршрутах:
<?php
use App\Http\Controllers\UserController;
use Illuminate\Support\Facades\Route;
Route::get('/user', [UserController::class, 'index'])
->middleware('auth');
Route::get('/profile', [UserController::class, 'profile'])
->middleware('age:18');
Route::get('/data', [UserController::class, 'data'])
->middleware('api_key');
?>
Смотрите также
-
команда
make:controller,
которая создаёт новый контроллер -
команда
make:request,
которая создаёт класс запроса для валидации -
команда
make:model,
которая создаёт новую Eloquent-модель -
команда
make:job,
которая создаёт класс задания для очередей