Junior: питання на співбесіді з теми «Middleware»
Питання з реальних співбесід з відповідями: Laravel і PHP, бази даних, JavaScript і фронтенд, Git, Docker, API, безпека й архітектура. Тими самими темами, що й тести.
2 питання
Middleware - це шар фільтрації HTTP-запитів, що «обгортає» обробку: код може виконатися до того, як запит дійде до контролера, і/або після формування відповіді. Уявіть це як серію «застав», крізь які проходить кожен запит.
Створити middleware:
php artisan make:middleware EnsureUserIsActive
Логіка - у методі handle(); ключове - викликати $next($request), щоб передати запит далі конвеєром:
public function handle(Request $request, Closure $next): Response
{
if (! $request->user()?->is_active) {
return redirect('login'); // перервати конвеєр
}
return $next($request); // пропустити далі
}
Реєстрація та призначення (у Laravel 11+ - у bootstrap/app.php), застосування до маршрутів:
Route::get('/dashboard', ...)->middleware('auth');
Route::middleware(['auth', 'verified'])->group(fn () => ...);
Типові вбудовані middleware: auth (автентифікація), throttle (обмеження частоти), verified (підтверджений email), signed (підписані URL). Middleware - основа для авторизації, логування, CORS, локалізації.
Клас створює команда:
php artisan make:middleware EnsureUserIsSubscribed
public function handle(Request $request, Closure $next): Response
{
if (! $request->user()?->subscribed()) {
return redirect()->route('billing');
}
return $next($request);
}
Як підключити - залежно від того, де він потрібен:
// на маршруті чи групі
Route::get('/reports', ReportController::class)->middleware(EnsureUserIsSubscribed::class);
// bootstrap/app.php
->withMiddleware(function (Middleware $middleware): void {
$middleware->append(LogRequestId::class); // глобальний, на кожен запит
$middleware->web(append: [SetLocale::class]); // до групи web
$middleware->alias(['subscribed' => EnsureUserIsSubscribed::class]); // коротке ім'я
})
Після аліасу на маршруті можна писати ->middleware('subscribed').
Що змінилося: до Laravel 11 усе це жило в app/Http/Kernel.php (властивості $middleware, $middlewareGroups, $routeMiddleware). У нових застосунках цього класу немає - налаштування в bootstrap/app.php.
У Laravel 13 middleware можна призначити й атрибутом прямо на контролері: #[Middleware('subscribed')].