Skip to content

Repository files navigation

Read in other languages: English 🇺🇸, Polska 🇵🇱, German 🇩🇪, French 🇫🇷, Spanish 🇪🇸, Українська 🇺🇦.

Laravel Laravel logo

Найпопулярніші запитання та відповіді на співбесіді з Laravel

1. Що таке Laravel і чому його використовують?

Laravel

Laravel — це сучасний PHP-фреймворк для веброзробки, орієнтований на продуктивність розробника, чисту архітектуру та підтримуваний код.

  1. Що таке Laravel
  • Відкритий фреймворк, побудований на компонентах Symfony.
  • Достатньо opinionated, щоб давати сильні стандартні рішення, але водночас гнучкий для кастомної архітектури.
  1. Чому його використовують
  • Прискорює розробку завдяки вбудованим механізмам маршрутизації, валідації, автентифікації, черг, пошти, подій і кешування.
  • Сприяє чистому коду через сервісний контейнер, middleware, Eloquent ORM та інструменти тестування.
  • Надає офіційні інструменти (Artisan, міграції, планувальник, Horizon, Telescope) для production-ready застосунків.
  1. Типові сценарії використання
  • REST API та бекенд-сервіси.
  • Серверно-рендерені вебзастосунки.
  • Адмінпанелі, SaaS-продукти та маркетплейси.
  • Фонова обробка задач і інтеграції зі сторонніми сервісами.

Коротко: Laravel використовують, щоб швидше будувати безпечні, масштабовані й підтримувані PHP-застосунки з меншим обсягом шаблонного коду.

2. Що таке Composer autoloading і як працює PSR-4?

PHP

Composer autoloading — це механізм автоматичного завантаження класів без ручних require/include, а PSR-4 — стандарт мапінгу namespace до файлової структури.

  1. Роль Composer autoload
  • Генерує автозавантажувач на основі конфігурації пакетів/застосунку.
  • Підключається один раз і підвантажує класи за потреби.
  1. Принцип PSR-4
  • Namespace-префікс мапиться на базову директорію.
  • Сегменти namespace відповідають піддиректоріям.
  • Ім’я класу відповідає імені файла.
  1. Приклад
  • App\\ -> app/
  • App\\Services\\BillingService -> app/Services/BillingService.php
  1. Чому це важливо
  • Передбачувана структура коду.
  • Менше ручного bootstrap-боїлерплейту.
  • Краща сумісність із екосистемою пакетів.

Composer + PSR-4 — фундамент сучасної організації PHP/Laravel-кодової бази.

3. Що таке spread/splat оператор у PHP?

PHP

Оператор ... у PHP використовується для розпакування аргументів/масивів і для variadic-параметрів.

  1. Argument unpacking
$args = [2, 3];
$result = sum(...$args);
  1. Array unpacking
$a = [1, 2];
$b = [...$a, 3, 4];
  1. Variadic capture
function logAll(string ...$messages): void {}

... робить функціональний і композиційний код коротшим і читабельнішим.

4. Що таке enums у PHP 8.1+?

PHP

Enums — це нативні типи для моделювання обмеженої множини станів/значень.

  1. Види
  • Unit enums (без скалярного значення).
  • Backed enums (із string або int значенням).
  1. Приклад
enum OrderStatus: string
{
    case Draft = 'draft';
    case Paid = 'paid';
    case Shipped = 'shipped';
}
  1. Навіщо
  • Сильніші контракти.
  • Менше “магічних рядків”.
  • Краща type safety і static analysis.

Enums — рекомендований підхід для finite-state моделей у сучасному PHP.

5. Що таке readonly properties у PHP?

PHP

readonly властивість можна присвоїти лише один раз (зазвичай у конструкторі).

  1. Поведінка
  • Після ініціалізації змінювати значення заборонено.
  1. Приклад
final class UserDto
{
    public function __construct(
        public readonly int $id,
        public readonly string $email,
    ) {}
}
  1. Переваги
  • Менше випадкових мутацій.
  • Простіше підтримувати immutable-об’єкти.

Readonly properties підвищують передбачуваність об’єктного стану.

6. Що таке readonly classes у PHP 8.2+?

PHP

readonly class робить усі instance-властивості класу readonly за замовчуванням.

  1. Що це дає
  • Політика незмінності на рівні всього класу.
  • Менше boilerplate, ніж ставити readonly на кожне поле окремо.
  1. Приклад
readonly class Money
{
    public function __construct(
        public int $amount,
        public string $currency,
    ) {}
}

Readonly classes добре підходять для value objects і DTO з immutable-семантикою.

7. Що таке PHP generators і коли їх варто використовувати?

PHP

Generators — це функції з yield, які повертають значення ліниво, по одному, без створення великого масиву в пам’яті.

  1. Що вирішують
  • Значно зменшують споживання пам’яті при обробці великих наборів даних.
  1. Коли використовувати
  • Потокова обробка файлів.
  • Ітерація великих вибірок із БД.
  • Пайплайни, де не потрібна повна матеріалізація всіх даних.
  1. Приклад
function numbers(int $max): Generator
{
    for ($i = 1; $i <= $max; $i++) {
        yield $i;
    }
}

Generators доречні там, де важлива memory-efficiency і послідовна обробка даних.

8. Що таке Laravel Sail?

Laravel

Laravel Sail — це офіційне легковагове Docker-оточення для локальної розробки Laravel.

  1. Що дає Sail
  • Готові контейнери для PHP, БД, Redis та супутніх сервісів.
  • Узгоджене локальне середовище для всієї команди.
  1. Чому його використовують
  • Швидкий онбординг нових розробників.
  • Менше “працює тільки в мене” проблем.
  • Не треба вручну збирати локальний стек.
  1. Практична користь
  • Команди запуску, тестування й сервісних операцій виконуються через єдиний Docker-based workflow.

Sail — практичний дефолт для контейнеризованої локальної розробки на Laravel.

9. Що таке Form Requests?

Laravel

Form Requests — це окремі request-класи, які інкапсулюють валідацію та авторизацію для конкретного HTTP-запиту.

  1. Що містять
  • authorize() для перевірки права на дію.
  • rules() для правил валідації.
  1. Як використовуються
  • Type-hint у controller action; Laravel автоматично виконує перевірки до бізнес-логіки.
public function store(StoreOrderRequest $request): JsonResponse
{
    $data = $request->validated();
    // ...
}
  1. Переваги
  • Тонші контролери.
  • Централізована й повторно використовувана валідація.
  • Простіше тестування request-рівня.

Form Requests — канонічний Laravel-підхід до валідації вхідних даних на межі API/web.

10. Як створювати REST API у Laravel?

Laravel

Створення REST API у Laravel базується на ресурсних маршрутах, валідації, авторизації та стабільному JSON-контракті.

  1. Використовуйте routes/api.php і Route::apiResource(...).
  2. Тримайте контролери тонкими, бізнес-логіку виносьте в сервіси/actions.
  3. Валідуйте вхідні дані через Form Requests.
  4. Формуйте відповіді через API Resources.
  5. Захищайте API через Sanctum/Passport, middleware, policies і rate limiting.

Добрий REST API в Laravel — це насамперед узгодженість контрактів і передбачувана поведінка.

11. Як працює concurrency у чергах?

Laravel

Concurrency у чергах досягається запуском кількох workers паралельно, щоб обробляти багато jobs одночасно.

  1. Модель
  • Кожен worker обробляє jobs незалежно.
  • Більше workers = вищий паралельний throughput.
  1. Керування
  • Кількість worker-процесів.
  • Розділення за пріоритетними чергами.
  • Налаштування timeout/retry/memory.
  1. Вимоги до коректності
  • Jobs мають бути ідемпотентними.
  • Для спільних ресурсів потрібні блокування/атомарні операції.

Concurrency підвищує пропускну здатність, але вимагає правильної моделі консистентності.

12. Що таке ідемпотентність у queued jobs?

Laravel

Ідемпотентність означає: повторний запуск тієї самої job не змінює фінальний результат порівняно з одноразовим виконанням.

  1. Чому це критично
  • Jobs можуть ретраїтися.
  • Можливі дублікати dispatch.
  1. Як реалізувати
  • Унікальні бізнес-ключі/idempotency keys.
  • Перевірка стану перед побічною дією.
  • DB-обмеження або атомарні операції.
  1. Приклад
  • “Надіслати інвойс лише один раз на invoice ID”.

Ідемпотентність — ключ до надійних retry-safe асинхронних процесів.

13. Як працює кешування в Laravel?

Laravel

Laravel cache зберігає попередньо обчислені дані у швидкому сховищі, щоб зменшити повторні дорогі обчислення.

  1. Патерн
  • Читаємо з кешу.
  • За відсутності — обчислюємо і зберігаємо з TTL.
  1. API
  • get, put, remember, rememberForever, forget.
  1. Приклад
$users = Cache::remember('users.active', 300, fn () => User::where('is_active', true)->get());

Кеш знижує latency й навантаження на БД.

14. Які cache drivers доступні?

Laravel

Поширені cache drivers у Laravel:

  • array
  • file
  • database
  • redis
  • memcached
  • dynamodb (за конфігурації)
  • null

Для high-load сценаріїв зазвичай обирають Redis або Memcached.

15. Які cache-стратегії варто використовувати у high-load Laravel-застосунку?

Laravel

  1. Cache-aside (remember) для дорогих запитів.
  2. Захист від cache stampede через locks/jitter.
  3. Точкове invalidation (за можливості tags).
  4. Кешування компактних payload замість важких об’єктів.
  5. Постійний моніторинг hit rate/latency.

У high-load найважливіші не лише швидкі кеші, а й правильна invalidation-стратегія.

16. Що таке cache tags?

Laravel

Cache tags дозволяють групувати ключі й очищати їх разом.

  1. Навіщо
  • Точкове очищення пов’язаних кешів без глобального flush.
  1. Приклад
Cache::tags(['users', 'team:42'])->put('users.team.42.list', $data, 600);
Cache::tags(['users', 'team:42'])->flush();

Працює не на всіх драйверах (типово Redis/Memcached).

17. Як очищати та прогрівати кеш?

Laravel

  1. Очищення
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear
  1. Побудова кешів
php artisan config:cache
php artisan route:cache
php artisan view:cache
  1. Warm-up
  • Після деплою наперед заповнюйте “гарячі” ключі для зменшення cold-start.
18. Що таке Laravel Octane?

Laravel

Laravel Octane запускає Laravel на long-lived workers (Swoole або RoadRunner) замість повного bootstrap на кожен запит.

Це дає вищий throughput і нижчу latency для відповідних навантажень.

19. Як Laravel Octane покращує продуктивність?

Laravel

  1. Менше перезапусків framework bootstrap.
  2. Більше запитів на один worker-процес.
  3. Краща ефективність під сталим навантаженням.

Важливо писати Octane-safe код (без витоків mutable state між запитами).

20. Що таке Swoole і RoadRunner?

Laravel

Swoole і RoadRunner — high-performance application servers для Octane.

  • Swoole: PHP-розширення з async/coroutines.
  • RoadRunner: Go-based сервер із persistent PHP workers.

Обидва зменшують overhead класичного request-per-process підходу.

21. Які проблеми можуть виникати через state persistence в Octane?

Laravel

Оскільки workers довгоживучі, помилки керування станом можуть “протікати” між запитами.

  1. Stale singleton/static state.
  2. Випадкове збереження request/user контексту.
  3. Memory growth і нестабільність worker-ів.

Потрібні stateless-підходи, скидання контексту й моніторинг пам’яті.

22. Як оптимізувати Laravel-застосунок для production?

Laravel

  1. Увімкнути framework caches (config, route, view).
  2. Налаштувати OPcache.
  3. Виносити важкі задачі в queues.
  4. Оптимізувати БД (N+1, індекси, EXPLAIN).
  5. Використовувати Redis/Memcached кеш.
  6. Налаштувати моніторинг і алерти.
  7. Використовувати безпечний zero-downtime deployment flow.

Production-оптимізація — безперервний цикл “виміряти → покращити → перевірити”.

23. Що таке task scheduling у Laravel?

Laravel

Task scheduling у Laravel — це кодо-орієнтований шар керування регулярними задачами (cron orchestration).

  1. Базова ідея
  • Розклад визначається в коді застосунку.
  • Системний cron запускає Laravel scheduler щохвилини.
  1. Типові сценарії
  • Періодичні синхронізації даних.
  • Очистка службових даних.
  • Генерація звітів.
  • Розсилки за розкладом.
  1. Переваги
  • Централізовані, версійовані правила запуску.
  • Менше ручного адміністрування великої кількості cron-записів на сервері.
  • Підтримка overlap-захисту, environment-умов і гнучкої частоти.
  1. Операційний принцип
  • Налаштовується один cron-запис для schedule:run.
  • Laravel сам визначає, які задачі мають запуститися в поточну хвилину.

Task scheduling робить регулярну автоматизацію в Laravel передбачуваною й підтримуваною.

24. Що таке Laravel Broadcasting?

Laravel

Laravel Broadcasting — це realtime-шар Laravel для доставки server-side подій клієнтам через WebSockets (або сумісні драйвери).

  1. Що він робить
  • Транслює вибрані події Laravel у канали.
  • Дозволяє клієнтам підписуватися й реагувати миттєво.
  1. Типові сценарії
  • Живі сповіщення.
  • Чати та індикатори присутності.
  • Realtime-дашборди й оновлення статусів.
  1. Ключові поняття
  • Канали: public, private, presence.
  • Авторизація для private/presence каналів.
  • Event-класи з broadcasting-поведінкою.
  1. Загальна схема
  • Backend dispatch-ить broadcast event.
  • Broadcast driver відправляє подію у websocket-інфраструктуру.
  • Frontend (зазвичай Laravel Echo) слухає подію та оновлює UI.

Broadcasting дозволяє будувати реактивний UX без надмірного polling.

25. Що таке job batching?

Laravel

Job batching об’єднує багато jobs в один керований пакет із загальним життєвим циклом.

  1. Що це дає
  • Dispatch багатьох jobs як одного логічного процесу.
  • Відстеження прогресу, завершення та помилок.
  • Callback-и на етапах then, catch, finally.
  1. Типовий сценарій
  • Імпорт великого файлу, розбитий на багато jobs по чанках.
  1. Де корисно
  • Масові імпорт/експорт процеси.
  • Переіндексація.
  • Fan-out завдання, де важливий загальний статус.
  1. Практична користь
  • Краще спостереження за multi-job workflow.
  • Простіше керування в адмінці (моніторинг/скасування).

Batching доречний, коли багато паралельних jobs належать одному бізнес-процесу.

26. Як працюють signed URLs у Laravel?

Laravel

Signed URL містить криптографічний підпис, що підтверджує: посилання сформоване вашим застосунком і не було змінене.

  1. Що захищається
  • Цілісність path і query parameters.
  • За потреби — строк дії (тимчасові посилання).
  1. Як згенерувати
$url = URL::signedRoute('unsubscribe', ['user' => $user->id]);
$temporary = URL::temporarySignedRoute('download', now()->addMinutes(30), ['file' => $fileId]);
  1. Як перевірити
  • Використайте middleware signed на маршруті або відповідну перевірку в запиті.
Route::get('/unsubscribe/{user}', UnsubscribeController::class)
    ->name('unsubscribe')
    ->middleware('signed');
  1. Типові сценарії
  • Unsubscribe links.
  • Email verification дії.
  • Тимчасові download/action посилання.

Signed URLs дають простий спосіб безпечно відкривати публічні дії без обов’язкової сесійної автентифікації.

27. Як Laravel захищає від XSS-атак?

Laravel

Laravel запобігає XSS переважно через безпечний рендеринг і escaping за замовчуванням.

  1. Blade екранує вивід автоматично
  • {{ $value }} HTML-escape-иться за замовчуванням.
  • Це не дозволяє недовіреному HTML/JS виконатися в браузері.
  1. Обережно з raw output
  • {!! $value !!} рендерить без escaping.
  • Використовуйте лише для довіреного або попередньо санітайзеного контенту.
  1. Додаткові захисні шари
  • Валідація й нормалізація вводу.
  • CSP та інші security headers (через middleware/server config).
  1. API/frontend-практика
  • JSON-відповіді зазвичай безпечніші за вставку сирого HTML.
  • На client-side також потрібно екранувати недовірені дані.
  1. Практичне правило
  • Escape by default, sanitize when needed, minimize raw rendering paths.

Laravel дає сильні дефолти, але фінальна безпека залежить від дисципліни виводу в прикладному коді.

28. Як Laravel захищає від SQL Injection?

Laravel

Laravel знижує ризик SQL Injection завдяки parameter binding і безпечним query-абстракціям за замовчуванням.

  1. Prepared statements і bindings
  • Query Builder та Eloquent використовують bind-параметри замість конкатенації SQL-рядків.
  1. Безпечні приклади
User::where('email', $email)->first();
DB::table('orders')->where('status', $status)->get();
  1. Де лишається ризик
  • Ручна конкатенація в raw SQL із недовіреним вводом.
// небезпечно, якщо $input недовірений
DB::select("SELECT * FROM users WHERE email = '$input'");
  1. Безпечний raw SQL
  • Використовуйте placeholders і bindings:
DB::select('SELECT * FROM users WHERE email = ?', [$input]);
  1. Best practices
  • Віддавайте перевагу Eloquent/Query Builder.
  • Валідуйте вхідні дані.
  • Мінімізуйте ручне складання SQL із зовнішніх параметрів.

Laravel безпечний за замовчуванням, але некоректне використання raw SQL може повернути injection-ризики.

29. Коли обирати Sanctum замість Passport?

Laravel

Sanctum доцільно обирати тоді, коли потрібна проста first-party автентифікація без повного OAuth2-стека.

  1. Коли Sanctum підходить найкраще
  • SPA + Laravel backend із session/cookie auth.
  • Mobile або внутрішні клієнти з personal access tokens.
  • Невеликі/середні API, де не потрібна OAuth2 delegation.
  1. Чому саме Sanctum
  • Швидше впровадження.
  • Менша операційна складність.
  • Менше рухомих частин у керуванні токенами.
  1. Коли його недостатньо
  • Потрібна делегована авторизація для сторонніх застосунків.
  • Потрібні повні OAuth2 grant-flow і стандартизований auth-server рівень.
  1. Практичне правило
  • За замовчуванням для first-party продуктів — Sanctum.
  • Переходьте на Passport, коли OAuth2-вимоги чітко сформульовані.

Sanctum — прагматичний дефолт для більшості Laravel API у продуктовій розробці.

30. Порівняйте Laravel Sanctum і Laravel Passport.

Laravel

Sanctum і Passport обидва надають API-автентифікацію, але орієнтовані на різну складність задач.

  1. Sanctum
  • Легковагова token-auth + SPA session-auth.
  • Personal access tokens і прості abilities.
  • Швидший старт і менше OAuth2-складності.
  1. Passport
  • Повноцінний OAuth2 server.
  • Підтримує authorization code, client credentials, refresh tokens, scopes та інші OAuth2-механізми.
  • Краще підходить для third-party delegated authorization.
  1. Компроміс
  • Sanctum: простіше впровадити і підтримувати для first-party застосунків.
  • Passport: потужніше, але важче в налаштуванні та операційному супроводі.
  1. Типовий вибір
  • Sanctum: SPA/mobile + власний backend.
  • Passport: платформи з зовнішніми OAuth-клієнтами та складними auth-сценаріями.

Обирайте за реальними протокольними вимогами, а не за “універсальністю” пакета.

31. Що таке multi-authentication і як його реалізувати?

Laravel

Multi-authentication — це підтримка кількох типів користувачів/guard-контекстів в одному застосунку (наприклад, web, admin, api).

  1. Типові сценарії
  • Окремі портали для адміністраторів і клієнтів.
  • Різні рівні доступу для внутрішніх і зовнішніх користувачів.
  • Різні auth-стратегії для різних каналів доступу.
  1. Як реалізувати
  • Налаштувати кілька guards/providers у auth-конфігурації.
  • Використовувати middleware з конкретним guard: auth:admin, auth:web, auth:sanctum.
  • За потреби мати окремі login-flow/controllers/routes для кожного guard.
  1. Приклад
Route::middleware('auth:admin')->group(function () {
    Route::get('/admin/dashboard', AdminDashboardController::class);
});
  1. Best practices
  • Ізолюйте route-групи для кожного guard.
  • Тримайте authorization-правила явними для кожного user-type.

Multi-auth дає чітке розділення ідентичностей і прав доступу в різних доменах одного застосунку.

32. Як працює автентифікація в Laravel?

Laravel

Автентифікація в Laravel перевіряє особу користувача й зберігає її між запитами через guards і providers.

  1. Ключові складові
  • Guards визначають, як користувач автентифікується (session, token тощо).
  • Providers визначають, як отримуються користувачі (зазвичай Eloquent-модель).
  1. Session-based flow (web)
  • Користувач надсилає credentials.
  • Laravel валідує їх через provider.
  • У разі успіху ID користувача зберігається в сесії.
  • Наступні запити резолвлять користувача із session/cookie.
  1. Token-based flow (API)
  • Клієнт надсилає токен (наприклад, Sanctum/Passport bearer token).
  • Guard валідує токен і резолвить користувача.
  1. Корисні helper-и
  • Auth::attempt(), Auth::user(), auth()->check().
  • Middleware auth для захисту маршрутів.

Laravel-автентифікація є guard-орієнтованою та однаково добре працює і для web, і для API.

33. У чому різниця між API Resources і Transformers?

Laravel

Обидва підходи формують вихідні дані, але API Resources — це нативний стандарт Laravel, а Transformers — ширший архітектурний патерн або зовнішній шар мапінгу.

  1. API Resources (вбудовано в Laravel)
  • Офіційний механізм Laravel (JsonResource).
  • Тісна інтеграція з фреймворком і просте використання.
  • Найкращий дефолт для більшості Laravel API.
  1. Transformers (загальний патерн / пакети)
  • Архітектурний підхід для мапінгу domain-даних у response DTO.
  • Може бути реалізований кастомними класами або пакетами (наприклад, Fractal-подібні підходи).
  • Корисний, коли потрібен framework-agnostic або дуже кастомний transformation pipeline.
  1. Практична різниця
  • Resource = офіційний Laravel-підхід.
  • Transformer = ширший патерн, який може як використовувати Laravel-примітиви, так і бути незалежним від них.
  1. Що обирати
  • У Laravel-first застосунках: за замовчуванням API Resources.
  • Кастомний transformer-шар: коли межі домену/API вимагають додаткового відокремлення.

Обидва підходи розв’язують проблему представлення даних; вибір залежить від складності архітектури та вимог до переносимості.

34. Що таке soft deletes?

Laravel

Soft deletes позначають запис як видалений, але фізично не видаляють його з таблиці.

  1. Як це працює
  • Використовується колонка deleted_at.
  • Під час видалення встановлюється deleted_at, а рядок лишається в БД.
  • Дефолтні запити не повертають soft-deleted записи.
  1. Увімкнення в моделі
use Illuminate\Database\Eloquent\SoftDeletes;

class Post extends Model
{
    use SoftDeletes;
}
  1. Ключові helper-методи
  • withTrashed() — включити видалені записи.
  • onlyTrashed() — тільки видалені.
  • restore() — відновити запис.
  • forceDelete() — видалити назавжди.
  1. Чому це корисно
  • Можливість відновлення даних.
  • Краща “аудитність” і безпечніший робочий процес при випадкових видаленнях.

Soft deletes — практичний компроміс між семантикою видалення та відновлюваністю даних.

35. Що таке database seeding?

Laravel

Database seeding — це процес заповнення бази даних наперед визначеними або згенерованими даними.

  1. Призначення
  • Підготувати застосунок до роботи з необхідними стартовими даними.
  • Дати реалістичні набори даних для development/testing.
  1. Як запускається
  • Класи сідів виконуються через Artisan.
php artisan db:seed
php artisan db:seed --class=UserSeeder
  1. Типовий процес
  • DatabaseSeeder оркеструє запуск інших сідів.
  • Factories використовуються для масового створення синтетичних записів.
  1. Best practices
  • Критичні довідкові дані робіть детермінованими.
  • У production уникайте руйнівної логіки сідів, якщо це не заплановано явно.
  • Версіонуйте сіди разом із кодовою базою.

Seeding забезпечує відтворюваність середовищ і готовність системи до розробки чи тестування.

36. Як генерувати й відкочувати міграції?

Laravel

Laravel надає Artisan-команди для створення міграцій і керування їх виконанням.

  1. Генерація міграції
php artisan make:migration create_orders_table
php artisan make:migration add_status_to_orders_table --table=orders
  1. Запуск міграцій
php artisan migrate
  1. Відкат останнього batch
php artisan migrate:rollback
  1. Відкат кількох кроків
php artisan migrate:rollback --step=3
  1. Інші корисні команди
  • php artisan migrate:reset (відкатити все)
  • php artisan migrate:refresh (reset + migrate)
  • php artisan migrate:fresh (видалити всі таблиці + migrate)

Команди rollback/refresh потрібно застосовувати обережно, особливо в production-середовищі.

37. Що таке транзакції бази даних і як їх використовувати?

Laravel

Транзакція бази даних об’єднує кілька операцій в одну атомарну дію: або виконуються всі, або всі відкочуються.

  1. Навіщо потрібні транзакції
  • Зберігають цілісність даних при пов’язаних записах.
  • Запобігають частковим змінам, якщо виникла помилка.
  1. Використання в Laravel
DB::transaction(function () use ($orderData) {
    $order = Order::create($orderData);
    Inventory::reserveForOrder($order);
    Payment::captureForOrder($order);
});
  1. Ручне керування (за потреби)
DB::beginTransaction();

try {
    // operations
    DB::commit();
} catch (Throwable $e) {
    DB::rollBack();
    throw $e;
}
  1. Best practices
  • Тримайте транзакцію короткою й швидкою.
  • Уникайте довгих зовнішніх HTTP-викликів усередині транзакції.
  • За потреби комбінуйте з row locking для конкурентно-чутливих сценаріїв.

Транзакції критично важливі для надійних фінансових, складських і багатокрокових бізнес-процесів.

38. Як вивести raw SQL-запити в Laravel?

Laravel

У Laravel є кілька способів переглянути SQL і bindings залежно від глибини дебагу.

  1. toSql() + getBindings()
$query = User::where('email', 'like', '%@example.com%');

$sql = $query->toSql();
$bindings = $query->getBindings();
  1. toRawSql() (сучасний Laravel)
  • Повертає SQL із підставленими bindings для зручнішого читання.
$sql = User::where('id', 5)->toRawSql();
  1. Слухач запитів
DB::listen(function ($query) {
    logger()->debug($query->sql, $query->bindings);
});
  1. Інструменти
  • Laravel Telescope / Debugbar можуть показувати виконані запити та їхній час.

Ці підходи варто використовувати в development/debugging, а не як постійну production-вивідну логіку.

39. Що таке chunking і коли використовувати chunk() або lazy()?

Laravel

Chunking — це обробка результатів запиту невеликими пакетами, а не завантаження всього набору в пам’ять одразу.

  1. chunk()
  • Отримує записи фіксованими порціями й виконує callback для кожного chunk.
User::query()->chunk(1000, function ($users) {
    foreach ($users as $user) {
        // process
    }
});
  1. lazy()
  • Внутрішньо теж працює через порції, але назовні дає єдиний lazy-потік.
  • Зручніший для pipeline-style коду.
User::query()->lazy(1000)->each(function (User $user) {
    // process
});
  1. Коли що обирати
  • chunk() — коли потрібна явна обробка “пакет за пакетом”.
  • lazy() — коли потрібен гнучкий потоковий fluent-процес.
  1. Важлива примітка
  • Якщо ви оновлюєте записи під час ітерації, віддавайте перевагу ID-орієнтованим варіантам (chunkById, lazyById), щоб уникнути пропусків/дублів.

Chunking — базова практика для обробки великих наборів даних із контрольованим споживанням пам’яті.

40. Яке призначення методу cursor()?

Laravel

cursor() повертає lazy-ітератор результатів, що дозволяє проходити записи по одному з мінімальним використанням пам’яті.

  1. Навіщо використовувати
  • Щоб не завантажувати весь результат запиту в RAM.
  • Щоб ефективно обробляти великі таблиці.
  1. Приклад
foreach (User::where('is_active', true)->cursor() as $user) {
    // process user
}
  1. Характеристики
  • Ітерація на базі генератора.
  • Добре підходить для read/process-пайплайнів.
  • Ефективний у queue/long-running job сценаріях.
  1. Коли це не ідеально
  • Якщо потрібен випадковий доступ до всіх результатів одразу.
  • Якщо потрібна важка eager-завантажена графова структура для всього набору.

cursor() — ключовий інструмент масштабованої обробки записів “рядок за рядком”.

41. Що таке Lazy Collections?

Laravel

Lazy Collections обробляють елементи як потік (на базі генераторів), а не завантажують усі дані в пам’ять одразу.

  1. Ключова властивість
  • Пам’яткоефективна ітерація великих наборів даних.
  1. Як це працює
  • Елементи генеруються та обробляються по одному.
  • Ланцюжок трансформацій виконується ліниво, під час ітерації.
  1. Типові джерела
  • lazy() у запитах.
  • cursor() в Eloquent/query builder.
  • Кастомні генератори, обгорнуті в LazyCollection.
  1. Коли використовувати
  • Скрипти міграції даних.
  • Великі експорт/імпорт процеси.
  • Фонові задачі з мільйонами рядків.
  1. Компроміс
  • Частина операцій колекцій, що вимагає повної матеріалізації, менш зручна для lazy-підходу.

Lazy Collections ідеальні там, де безпека пам’яті важливіша за random access.

42. У чому різниця між масивами й колекціями?

Laravel

Масиви — це нативна структура даних PHP, а колекції — об’єктні обгортки з fluent API для трансформацій.

  1. Масиви
  • Швидка нативна структура.
  • Доступ через синтаксис мови.
  • Менше високорівневих інструментів трансформації “з коробки”.
  1. Колекції
  • Об’єкти Illuminate\Support\Collection.
  • Chainable-методи: map, filter, reduce, sortBy, groupBy тощо.
  • Виразніші й читабельніші для складних пайплайнів обробки даних.
  1. Приклад
$names = collect($users)
    ->filter(fn ($u) => $u->is_active)
    ->pluck('name')
    ->values();
  1. Коли що використовувати
  • Масиви — для простих, низькорівневих операцій.
  • Колекції — для читабельності та композиційних трансформацій.

Колекції дають невеликий оверхед, але значно кращу ергономіку в прикладному коді.

43. Як згенерувати events і listeners?

Laravel

Laravel надає Artisan-генератори та стандартний flow реєстрації для events/listeners.

  1. Згенерувати event
php artisan make:event OrderPaid
  1. Згенерувати listener
php artisan make:listener SendOrderReceipt --event=OrderPaid
  1. Зареєструвати зв’язок
  • Зв’яжіть event і listener в event service provider або використовуйте discovery-конфігурацію фреймворку.
  1. Dispatch події
event(new OrderPaid($order));
  1. Черга для listener за потреби
  • Реалізуйте ShouldQueue у listener, щоб обробка йшла асинхронно.

Генерація + явна реєстрація роблять event-workflow прозорим і підтримуваним.

44. Що таке events і listeners у Laravel?

Laravel

Events і listeners реалізують publish-subscribe підхід для внутрішньої взаємодії модулів у Laravel-застосунку.

  1. Event
  • Представляє факт того, що щось сталося в домені/застосунку.
  • Приклади: OrderPaid, UserRegistered, InvoiceOverdue.
  1. Listener
  • Клас-обробник, який реагує на event і виконує побічну дію.
  • Приклади: надіслати email, оновити CRM, поставити downstream-job.
  1. Чому цей підхід корисний
  • Розв’язує core-flow і побічні дії.
  • Підвищує модульність і підтримуваність.
  • Дозволяє додавати кілька реакцій на одну подію без зміни producer-коду.
  1. Dispatch і обробка
  • Подія dispatch-иться із сервісу/контролера.
  • Фреймворк доставляє її зареєстрованим listeners.

Events описують факти, listeners реалізують реакції.

45. Що таке queued listeners?

Laravel

Queued listeners — це event-listeners, які виконуються асинхронно через систему черг, а не одразу під час dispatch події.

  1. Чим відрізняються від звичайних listeners
  • Звичайний listener виконується негайно.
  • Queued listener ставиться в чергу й обробляється worker-ом.
  1. Як увімкнути
  • Listener має реалізувати ShouldQueue.
  1. Навіщо це потрібно
  • Не блокувати request-cycle важкими побічними діями.
  • Винести у фон email, зовнішні API-виклики, аналітику тощо.
  1. Best practices
  • Робіть listener-логіку ідемпотентною.
  • Налаштовуйте retries/timeouts відповідно до ризиків.
  • Обробляйте помилки зовнішніх залежностей явно.

Queued listeners — ключовий елемент масштабованої event-обробки без деградації UX.

46. Що таке job batching?

Laravel

Job batching об’єднує багато jobs в один відстежуваний пакет із спільним життєвим циклом і callback-обробкою.

  1. Що дає batching
  • Можливість dispatch-ити багато jobs як один логічний блок.
  • Відстеження прогресу, завершення та помилок.
  • Callback-и на етапах then, catch, finally.
  1. Приклад сценарію
  • Імпорт великого файлу, розбитий на багато chunk-processing jobs в одному batch.
  1. Типові use case
  • Імпорт/експорт даних.
  • Масові reindex-операції.
  • Fan-out навантаження, де важливий загальний статус виконання.
  1. Операційні переваги
  • Краща спостережуваність і керованість multi-job workflow.
  • Простіший контроль (моніторинг/скасування) через адмінські інструменти.

Batching корисний, коли багато паралельних jobs належать до одного бізнес-процесу.

47. Як обробляти failed jobs?

Laravel

Laravel надає вбудовані механізми для фіксації, аналізу, повторного запуску та очищення failed jobs.

  1. Фіксація помилок
  • Налаштуйте сховище для failed jobs (зазвичай таблиця failed_jobs).
  • Винятки під час виконання переводять job у failed після вичерпання retry-ліміту.
  1. Retry-поведінка
  • Контролюється через властивості/опції job (tries, backoff-стратегії).
  1. Корисні команди
php artisan queue:failed
php artisan queue:retry all
php artisan queue:forget <id>
php artisan queue:flush
  1. Job-рівнева обробка
  • Реалізуйте метод failed(Throwable $e) для cleanup/alert/compensation логіки.
  1. Best practices
  • Робіть jobs ідемпотентними.
  • Додавайте структуроване логування й алерти.
  • Розділяйте transient і permanent failure-сценарії.

Надійна обробка failed jobs критична для стабільної асинхронної архітектури.

48. У чому різниця між queue drivers: sync, database, Redis і SQS?

Laravel

Ці драйвери відрізняються моделлю виконання, продуктивністю, надійністю та операційними вимогами.

  1. sync
  • Виконує job негайно в межах поточного запиту.
  • Не потребує фонового worker.
  • Добре для local dev/простих сценаріїв, але не для важкої асинхронної production-нагрузки.
  1. database
  • Зберігає jobs у таблиці реляційної БД.
  • Простий у старті й надійний, але зазвичай повільніший на високому throughput.
  1. redis
  • In-memory backend із високою швидкістю.
  • Підходить для високого throughput і низької latency.
  • Часто використовується разом із Horizon для моніторингу.
  1. sqs
  • Повністю керований queue-сервіс AWS.
  • Висока масштабованість і надійність.
  • Підходить для distributed/cloud-native архітектур; має хмарні затримки/вартість.
  1. Практичний вибір
  • Малий/простий проєкт: database.
  • Високонавантажений стек із Redis: redis.
  • AWS-native розподілені системи: sqs.
  • Локальне або примусово синхронне виконання: sync.

Вибір драйвера має відповідати профілю навантаження та інфраструктурній стратегії.

49. Які queue drivers доступні в Laravel?

Laravel

Laravel підтримує кілька backend-ів черг через конфігуровані drivers.

  1. Поширені вбудовані drivers
  • sync
  • database
  • redis
  • sqs (Amazon SQS)
  • null
  1. Загальні характеристики
  • sync: виконує job одразу в поточному request-потоці.
  • database: зберігає jobs у таблицях БД.
  • redis: швидкий in-memory backend.
  • sqs: керований хмарний queue-сервіс.
  • null: ігнорує jobs (корисно для окремих local/testing сценаріїв).
  1. Конфігурація
  • Налаштовується в config/queue.php та через environment variables.

Driver обирають за вимогами до надійності, throughput, інфраструктури та операційної моделі.

50. Що таке jobs і queue workers?

Laravel

Jobs і workers — це базові producer-consumer компоненти асинхронної обробки в Laravel.

  1. Jobs
  • Інкапсульовані класи задач (зазвичай у app/Jobs).
  • Представляють окрему одиницю роботи для негайного або відкладеного виконання.
  • Для асинхронного виконання зазвичай реалізують ShouldQueue.
  1. Queue workers
  • Довгоживучі процеси, які виконують jobs із черги.
  • Запускаються через Artisan (php artisan queue:work).
  • Підтримують параметри retries, timeout, sleep, queue selection.
  1. Потік виконання
  • Код dispatch-ить job (dispatch(...)).
  • Payload job потрапляє в обраний queue backend.
  • Worker забирає job і виконує handle().
  1. Операційна примітка
  • У production workers зазвичай керуються process manager-ом (Supervisor/systemd).

Jobs визначають роботу, а workers безперервно виконують її у фоні.

51. Поясніть систему черг у Laravel.

Laravel

Система черг Laravel виносить довгі або важкі задачі з HTTP request-cycle в асинхронну фонову обробку.

  1. Навіщо використовуються черги
  • Швидша відповідь користувачу.
  • Краща масштабованість під навантаженням.
  • Надійне виконання із retry-механізмами та контролем помилок.
  1. Як це працює
  • Застосунок dispatch-ить job у queue backend.
  • Queue worker читає job із черги й виконує її.
  • Невдалі jobs можна повторити або зберігати у failed storage.
  1. Типові задачі в черзі
  • Email-розсилки, сповіщення, генерація звітів.
  • Інтеграції з зовнішніми API та webhooks.
  • Обробка зображень/відео, важкі імпорт/експорт операції.
  1. Ключові інструменти екосистеми
  • Worker-команда queue:work.
  • Відстеження через failed_jobs.
  • Horizon (для Redis-черг) для моніторингу та керування.

Черги — критичний елемент для responsive і надійних Laravel-застосунків.

52. Що таке encrypted cookies і signed cookies?

Laravel

Encrypted cookies і signed cookies обидва захищають цілісність cookie, але шифрування додатково захищає конфіденційність вмісту.

  1. Encrypted cookies
  • Значення cookie шифрується й підписується.
  • Клієнт не може прочитати або коректно змінити оригінальне значення.
  • Laravel middleware може автоматично шифрувати/дешифрувати такі cookie.
  1. Signed cookies (орієнтація на цілісність)
  • Значення може залишатися читабельним, але перевіряється підписом.
  • Дозволяє виявляти підміну, але не приховує зміст.
  1. Дефолтна поведінка Laravel
  • У типовому web-стеку Laravel зазвичай використовуються саме encrypted cookies.
  1. Коли що використовувати
  • Encrypted cookies — для чутливих або stateful значень.
  • Signed-only підхід — коли читабельність прийнятна, але потрібна перевірка цілісності.
  1. Security note
  • Завжди встановлюйте Secure, HttpOnly та коректний SameSite.

На практиці encrypted cookies найчастіше є безпечнішим дефолтним вибором для Laravel web-застосунків.

53. Як працюють signed URLs у Laravel?

Laravel

Signed URL містить криптографічний підпис, який підтверджує, що посилання згенероване вашим застосунком і не було змінене.

  1. Що саме захищає
  • Цілісність path і query parameters.
  • Опційно — строк дії для time-limited посилань.
  1. Генерація signed URL
$url = URL::signedRoute('unsubscribe', ['user' => $user->id]);
$temporary = URL::temporarySignedRoute('download', now()->addMinutes(30), ['file' => $fileId]);
  1. Перевірка підпису
  • Використовуйте middleware signed на маршруті або перевірку через helper запиту.
Route::get('/unsubscribe/{user}', UnsubscribeController::class)
    ->name('unsubscribe')
    ->middleware('signed');
  1. Типові сценарії
  • Unsubscribe-посилання.
  • Email verification дії.
  • Тимчасові download/action посилання.

Signed URL — простий спосіб захищати публічні дії без обов’язкової повної автентифікованої сесії.

54. Яких security best practices має дотримуватися кожен Laravel-застосунок?

Laravel

Кожен Laravel-застосунок має поєднувати дефолтні механізми фреймворку зі строгою операційною дисципліною.

  1. Auth і контроль доступу
  • Захищайте приватні маршрути автентифікацією.
  • Використовуйте gates/policies для перевірки прав.
  • Дотримуйтеся принципу найменших привілеїв.
  1. Безпека вводу/виводу
  • Валідуйте всі вхідні дані.
  • Екрануйте вивід за замовчуванням (Blade {{ }}).
  • Уникайте конкатенації raw SQL; використовуйте bindings.
  1. Безпека сесій і cookies
  • Увімкніть HttpOnly, Secure та коректний SameSite.
  • Регенеруйте сесію на login/logout.
  1. Секрети й конфігурація
  • Захищайте .env, ротуйте секрети, розділяйте середовища.
  • Ніколи не комітьте credentials у git.
  1. Транспорт і заголовки
  • Примусово використовуйте HTTPS.
  • Додавайте security headers (CSP, HSTS, X-Frame-Options тощо).
  1. Гігієна залежностей і платформи
  • Регулярно оновлюйте Laravel/PHP/пакети.
  • Моніторте вразливості й швидко встановлюйте патчі.
  1. Захист від зловживань
  • Налаштовуйте rate limiting для auth і чутливих ендпоінтів.
  • Логуйте та моніторте підозрілу активність.
  1. Захист даних
  • Паролі лише хешуйте, чутливі зворотні дані шифруйте.
  • Робіть резервні копії та перевіряйте процедури відновлення.

Безпека — це не одна фіча, а багатошарова безперервна практика в коді та операціях.

55. Що таке Gates і Policies?

Laravel

Gates і Policies — це механізми авторизації в Laravel.

  1. Gates
  • Closure-орієнтовані правила авторизації.
  • Підходять для простих ability-перевірок, не прив’язаних жорстко до моделі.
  1. Policies
  • Класовий підхід до авторизації, організований навколо моделі/ресурсу.
  • Методи на кшталт view, create, update, delete тощо.
  1. Коли що використовувати
  • Gates — для простих глобальних перевірок.
  • Policies — для model-centric авторизації та масштабованих систем.
  1. Приклади використання
  • Gate::allows('export-reports')
  • $this->authorize('update', $post)

Gates дають легкі перевірки, Policies — структуровану авторизацію для великих застосунків.

56. Як працюють Blade-директиви @can і @cannot?

Laravel

@can і @cannot — це Blade-директиви, які умовно рендерять HTML залежно від результату авторизації.

  1. @can
  • Показує контент, якщо користувач має право на вказану дію.
@can('update', $post)
    <a href="{{ route('posts.edit', $post) }}">Edit</a>
@endcan
  1. @cannot
  • Показує контент, якщо користувач не має права.
@cannot('delete', $post)
    <span>You cannot delete this post.</span>
@endcannot
  1. Як вони обчислюються
  • Усередині викликають логіку gate/policy.
  • Працюють у контексті поточного автентифікованого користувача.
  1. Чому це корисно
  • UI узгоджується з backend-правилами доступу.
  • Користувач не бачить дій, які йому недоступні.

Ці директиви спрощують permission-aware рендеринг у Blade.

57. Що таке multi-authentication і як його реалізувати?

Laravel

Multi-authentication — це підтримка кількох user-type/guard-контекстів в одному застосунку (наприклад, web, admin, api).

  1. Типові сценарії
  • Окремі портали для адміністраторів і клієнтів.
  • Доступ для співробітників і зовнішніх партнерів.
  • Різні auth-стратегії для різних каналів.
  1. Як реалізувати
  • Налаштувати кілька guards/providers у auth-конфігурації.
  • Використовувати middleware з конкретним guard: auth:admin, auth:web, auth:sanctum.
  • За потреби розділити login-flow/controllers/routes для кожного guard.
  1. Приклад захисту маршруту
Route::middleware('auth:admin')->group(function () {
    Route::get('/admin/dashboard', AdminDashboardController::class);
});
  1. Best practices
  • Ізолюйте route-групи й session-flow для кожного guard.
  • Явно фіксуйте authorization-правила для кожного типу користувача.

Multi-auth дає чітке розділення ідентичностей і прав доступу між доменами застосунку.

58. Порівняйте Laravel Sanctum і Laravel Passport.

Laravel

Sanctum і Passport обидва вирішують API-автентифікацію, але для різного рівня складності.

  1. Sanctum
  • Легковагова token-auth + SPA session-auth.
  • Personal access tokens і прості abilities.
  • Швидкий старт без OAuth2-складності.
  1. Passport
  • Повноцінний OAuth2 server.
  • Підтримує authorization code, client credentials, refresh tokens, scopes (та інші потоки).
  • Краще підходить для third-party delegated authorization.
  1. Компроміс складності
  • Sanctum: простіше й швидше для first-party застосунків.
  • Passport: потужніше, але важче в налаштуванні та супроводі.
  1. Типовий вибір
  • Sanctum: SPA/mobile + власний backend.
  • Passport: platform/ecosystem API з зовнішніми OAuth-клієнтами.

Обирайте за вимогами протоколу автентифікації, а не лише за популярністю пакета.

59. Коли обирати Sanctum замість Passport?

Laravel

Sanctum варто обирати, коли потрібна проста first-party автентифікація без повного OAuth2-стеку.

  1. Добрі сценарії для Sanctum
  • SPA + Laravel backend із session/cookie auth.
  • Mobile або внутрішні клієнти з personal access tokens.
  • Невеликі/середні API, де OAuth2 delegation не потрібен.
  1. Чому саме Sanctum
  • Швидша реалізація.
  • Нижча операційна складність.
  • Менше рухомих частин у керуванні токенами.
  1. Коли цього недостатньо
  • Коли стороннім застосункам потрібна делегована авторизація користувача.
  • Коли потрібні повні OAuth2 grant-флоу та можливості auth-server рівня стандарту.
  1. Практичне правило
  • За замовчуванням — Sanctum для first-party продуктів.
  • Переходьте на Passport, коли OAuth2-вимоги явно присутні.

Sanctum — прагматичний дефолт для більшості Laravel API-продуктів.

60. Як Laravel захищає від SQL Injection?

Laravel

Laravel знижує ризик SQL Injection завдяки parameter binding і безпечним query-абстракціям “за замовчуванням”.

  1. Prepared statements / bindings
  • Query Builder і Eloquent використовують bind-параметри замість конкатенації SQL-рядків.
  1. Безпечні приклади
User::where('email', $email)->first();
DB::table('orders')->where('status', $status)->get();
  1. Де ризик лишається
  • Небезпечна ручна конкатенація raw SQL.
// risk, якщо $input недовірений
DB::select("SELECT * FROM users WHERE email = '$input'");
  1. Безпечний raw SQL
  • Використовуйте placeholders і bindings:
DB::select('SELECT * FROM users WHERE email = ?', [$input]);
  1. Best practices
  • Віддавайте перевагу Eloquent/Query Builder.
  • Валідуйте ввід і не будуйте SQL із недовірених значень вручну.

Laravel безпечний “із коробки”, але неправильне використання raw SQL може повернути injection-ризики.

61. Як Laravel захищає від CSRF-атак?

Laravel

Laravel захищає від CSRF, вимагаючи валідний CSRF-токен для state-changing web-запитів.

  1. Як це працює
  • Генерується session-bound токен і зберігається на сервері.
  • Форма містить токен (@csrf).
  • Middleware перевіряє токен на POST/PUT/PATCH/DELETE запитах.
  1. Використання в Blade
<form method="POST" action="/profile">
    @csrf
    <!-- fields -->
</form>
  1. AJAX/SPA
  • Токен можна передавати в заголовку (наприклад, X-CSRF-TOKEN) для same-site session-flow.
  1. Чому це ефективно
  • Зловмисник не може згенерувати коректний session-bound токен із іншого сайту.
  1. Важлива примітка
  • CSRF головно стосується cookie/session browser-запитів, а не типових stateless bearer-token API.

CSRF middleware — базовий рівень web-безпеки в Laravel.

62. Як Laravel захищає від XSS-атак?

Laravel

Laravel запобігає XSS передусім через escaping output і безпечні шаблонні дефолти.

  1. Blade за замовчуванням екранує
  • {{ $value }} автоматично HTML-escape-иться.
  • Це не дає недовіреному HTML/JS виконатися.
  1. Обережно з unescaped output
  • {!! $value !!} рендерить raw HTML, тому має використовуватися лише для довіреного/санітайзеного контенту.
  1. Додатковий захист
  • Валідація та нормалізація вводу зменшують ризик потрапляння шкідливих payload.
  • CSP/security headers (через middleware/server config) додають defense-in-depth.
  1. Frontend/API аспекти
  • Повернення JSON зазвичай безпечніше, ніж рендер raw HTML-фрагментів.
  • Client-side рендер теж має екранувати недовірений контент.
  1. Практичне правило
  • Escape by default, sanitize коли HTML справді потрібен, і мінімізуйте raw-render шляхи.

Laravel дає сильні дефолти, але безпечний output-handling у прикладному коді лишається критичним.

63. Як працює шифрування в Laravel?

Laravel

Laravel надає симетричне шифрування через facade Crypt із використанням ключа застосунку.

  1. Як це працює
  • Використовується app key із environment/config.
  • Дані шифруються з перевіркою цілісності для виявлення підміни.
  • Розшифрування можливе лише тим самим ключем.
  1. Типове використання
$encrypted = Crypt::encryptString('secret-value');
$plain = Crypt::decryptString($encrypted);
  1. Де застосовується
  • Чутливі значення, що зберігаються в БД/конфігурованих payload.
  • Внутрішні механізми фреймворку (наприклад, encrypted cookies, якщо увімкнено).
  1. Best practices
  • Тримайте APP_KEY секретним і стабільним для кожного середовища.
  • Ротуйте ключі обережно, з продуманою міграційною стратегією.
  • Не шифруйте те, що має бути хешованим (наприклад, паролі).

Шифрування Laravel дає простий і безпечний захист “at rest” для чутливих, але зворотно-дешифровуваних даних.

64. У чому різниця між автентифікацією та авторизацією?

Laravel

Автентифікація й авторизація пов’язані, але це різні рівні безпеки.

  1. Автентифікація (Authentication)
  • Відповідає на запитання: “Хто ви?”
  • Перевіряє особу (login/session/token).
  1. Авторизація (Authorization)
  • Відповідає на запитання: “Що вам дозволено робити?”
  • Перевіряє права/ability на конкретну дію або ресурс.
  1. Відображення в Laravel
  • Автентифікація: guards, providers, auth middleware.
  • Авторизація: gates, policies, can middleware, Blade-директиви @can.
  1. Приклад
  • Користувач може бути автентифікований (увійшов у систему), але не мати права видалити чужий пост.

Автентифікація встановлює ідентичність, авторизація застосовує правила доступу.

65. Як працює автентифікація в Laravel?

Laravel

Автентифікація в Laravel перевіряє особу користувача й зберігає цю ідентичність між запитами через guards і providers.

  1. Ключові складові
  • Guards визначають, як користувач автентифікується в запиті (session, token тощо).
  • Providers визначають, як отримуються користувачі (зазвичай Eloquent-модель).
  1. Session-based flow (web)
  • Користувач надсилає credentials.
  • Laravel валідує їх через provider.
  • У разі успіху ID користувача зберігається в сесії.
  • У наступних запитах поточний користувач резолвиться із session/cookie.
  1. Token-based flow (API)
  • Клієнт надсилає токен (наприклад, Sanctum/Passport bearer token).
  • Guard валідує токен і резолвить автентифікованого користувача.
  1. Фреймворкові helper-и
  • Auth::attempt(), Auth::user(), auth()->check().
  • Middleware auth захищає маршрути.
  1. Практична рекомендація
  • Використовуйте вбудовані auth-скелети/пакети для типових сценаріїв.
  • Тримайте auth-логіку централізовано, уникайте власної crypto/session-реалізації без потреби.

Автентифікація в Laravel guard-орієнтована й узгоджена для web та API точок входу.

66. У чому різниця між API Resources і Transformers?

Laravel

Обидва підходи формують вихідні дані, але API Resources — це нативний стандарт Laravel, а Transformers — ширший архітектурний патерн або зовнішній шар мапінгу.

  1. API Resources (вбудовано в Laravel)
  • Офіційний механізм Laravel (JsonResource).
  • Тісна інтеграція з фреймворком і просте використання.
  • Найкращий дефолт для більшості Laravel API.
  1. Transformers (загальний патерн / пакети)
  • Архітектурний підхід для мапінгу domain-даних у response DTO.
  • Може бути реалізований кастомними класами або пакетами (наприклад, Fractal-подібні підходи).
  • Корисний, коли потрібен framework-agnostic або дуже кастомний transformation pipeline.
  1. Практична різниця
  • Resource = офіційний Laravel-підхід.
  • Transformer = ширший патерн, який може як використовувати Laravel-примітиви, так і бути незалежним від них.
  1. Що обирати
  • У Laravel-first застосунках: за замовчуванням API Resources.
  • Кастомний transformer-шар: коли межі домену/API вимагають додаткового відокремлення.

Обидва підходи розв’язують проблему представлення даних; вибір залежить від складності архітектури та вимог до переносимості.

67. Що таке API Resources у Laravel?

Laravel

API Resources — це шар трансформації, який перетворює моделі/колекції на узгоджену JSON-структуру відповіді.

  1. Що вони роблять
  • Контролюють форму вихідних даних.
  • Приховують внутрішні поля.
  • Передбачувано форматують і компонують пов’язані дані.
  1. Приклад
final class UserResource extends JsonResource
{
    public function toArray($request): array
    {
        return [
            'id' => $this->id,
            'name' => $this->name,
            'email' => $this->email,
        ];
    }
}
  1. Використання
return new UserResource($user);
return UserResource::collection($users);
  1. Чому це важливо
  • Стабільні API-контракти.
  • Розділення persistence-моделі та transport-формату.
  • Простіше версіонування API й контроль політики відповіді.

API Resources — нативний first-class підхід Laravel для стандартизації JSON API-відповідей.

68. Як оптимізувати Eloquent-запити для продуктивності?

Laravel

Оптимізація Eloquent переважно зводиться до зменшення кількості запитів, обсягу даних і зайвої model-обробки.

  1. Уникайте N+1
  • Використовуйте with() / load() для relationships.
  1. Вибирайте лише потрібні колонки
User::query()->select('id', 'name')->get();
  1. Робіть агрегації/перевірки існування на рівні SQL
  • count, sum, exists, withCount замість завантаження повних колекцій.
  1. Ефективно обробляйте великі набори
  • Використовуйте chunkById, lazyById, cursor для memory-safe ітерації.
  1. Індексна стратегія
  • Додавайте релевантні індекси для частих фільтрів/сортувань/join.
  1. Кешуйте там, де доречно
  • Кешуйте стабільні або дорогі результати запитів.
  1. Вимірюйте та профілюйте
  • Використовуйте Telescope/Debugbar/query logs і EXPLAIN плани БД.
  1. Для складних звітних маршрутів використовуйте query builder/raw SQL
  • Не кожен важкий запит зручно моделювати лише високорівневим ORM-підходом.

Оптимізація має бути measurement-driven: спершу міряйте, потім покращуйте найкритичніші місця.

69. Що таке soft deletes?

Laravel

Soft deletes позначають запис як видалений, але фізично не видаляють його з таблиці.

  1. Як це працює
  • Використовується колонка deleted_at.
  • Під час видалення встановлюється deleted_at, а рядок лишається в БД.
  • Дефолтні запити не повертають soft-deleted записи.
  1. Увімкнення в моделі
use Illuminate\Database\Eloquent\SoftDeletes;

class Post extends Model
{
    use SoftDeletes;
}
  1. Ключові helper-методи
  • withTrashed() — включити видалені записи.
  • onlyTrashed() — тільки видалені.
  • restore() — відновити запис.
  • forceDelete() — видалити назавжди.
  1. Чому це корисно
  • Можливість відновлення даних.
  • Краща “аудитність” і безпечніший робочий процес при випадкових видаленнях.

Soft deletes — практичний компроміс між семантикою видалення та відновлюваністю даних.

70. Що таке database seeding?

Laravel

Database seeding — це процес заповнення бази даних наперед визначеними або згенерованими даними.

  1. Призначення
  • Підготувати застосунок до роботи з необхідними стартовими даними.
  • Дати реалістичні набори даних для development/testing.
  1. Як запускається
  • Класи сідів виконуються через Artisan.
php artisan db:seed
php artisan db:seed --class=UserSeeder
  1. Типовий процес
  • DatabaseSeeder оркеструє запуск інших сідів.
  • Factories використовуються для масового створення синтетичних записів.
  1. Best practices
  • Критичні довідкові дані робіть детермінованими.
  • У production уникайте руйнівної логіки сідів, якщо це не заплановано явно.
  • Версіонуйте сіди разом із кодовою базою.

Seeding забезпечує відтворюваність середовищ і готовність системи до розробки чи тестування.

71. Як працюють factories у сучасному Laravel?

Laravel

У сучасному Laravel factories є class-based і model-centric, зазвичай розміщуються в database/factories.

  1. Factory на основі definition
  • Метод definition() повертає дефолтні fake-атрибути.
final class UserFactory extends Factory
{
    public function definition(): array
    {
        return [
            'name' => fake()->name(),
            'email' => fake()->unique()->safeEmail(),
            'password' => bcrypt('password'),
        ];
    }
}
  1. States
  • Іменовані варіанти для конкретних сценаріїв.
public function admin(): static
{
    return $this->state(fn () => ['is_admin' => true]);
}
  1. Використання
User::factory()->admin()->count(3)->create();
User::factory()->make(); // не зберігає в БД
  1. Робота зі зв’язками
  • Factories підтримують створення relations через has(), for() та callbacks.

Factories роблять генерацію тестових/службових даних виразною, композиційною та контрольованою.

72. Що таке seeders і factories?

Laravel

Seeders і factories допомагають швидко генерувати та заповнювати дані для розробки, тестів і початкового стану системи.

  1. Seeders
  • Класи, які наповнюють БД визначеними наборами даних.
  • Підходять для базових довідкових даних (ролі, права, налаштування).
  1. Factories
  • “Шаблони” для генерації model-екземплярів із fake або кастомними даними.
  • Зручні для тестів і demo/dev-даних.
  1. Як працюють разом
  • Seeder викликає factories для швидкого створення великої кількості записів.
User::factory()->count(50)->create();
  1. Типові сценарії
  • Bootstrap локального середовища.
  • Підготовка даних для автотестів.
  • Наповнення staging/demo середовищ.

Seeders визначають, що вставляти, а factories визначають, як генерувати дані моделей.

73. Як генерувати й відкочувати міграції?

Laravel

Laravel надає Artisan-команди для створення міграцій і керування їх виконанням.

  1. Генерація міграції
php artisan make:migration create_orders_table
php artisan make:migration add_status_to_orders_table --table=orders
  1. Запуск міграцій
php artisan migrate
  1. Відкат останнього batch
php artisan migrate:rollback
  1. Відкат кількох кроків
php artisan migrate:rollback --step=3
  1. Інші корисні команди
  • php artisan migrate:reset (відкатити все)
  • php artisan migrate:refresh (reset + migrate)
  • php artisan migrate:fresh (видалити всі таблиці + migrate)

Команди rollback/refresh потрібно застосовувати обережно, особливо в production-середовищі.

74. Що таке міграції і чому вони важливі?

Laravel

Міграції — це version-controlled PHP-файли, які описують зміни схеми бази даних у часі.

  1. Що роблять міграції
  • Створюють/змінюють/видаляють таблиці, колонки, індекси, constraints.
  • Роблять зміни схеми відтворюваними в усіх середовищах.
  1. Чому це важливо
  • Командна робота над схемою через code review.
  • Детерміновані deploy-и й rollback-и.
  • Підхід “інфраструктура як код” для еволюції БД.
  1. Типова структура міграції
  • up() застосовує зміни.
  • down() відкочує зміни.
  1. Операційна цінність
  • Простіший онбординг і CI-налаштування.
  • Менше “works on my machine” розбіжностей схеми БД.

Міграції — основа підтримуваного життєвого циклу схеми в Laravel.

75. Що таке транзакції бази даних і як їх використовувати?

Laravel

Транзакція бази даних об’єднує кілька операцій в одну атомарну дію: або виконуються всі, або всі відкочуються.

  1. Навіщо потрібні транзакції
  • Зберігають цілісність даних при пов’язаних записах.
  • Запобігають частковим змінам, якщо виникла помилка.
  1. Використання в Laravel
DB::transaction(function () use ($orderData) {
    $order = Order::create($orderData);
    Inventory::reserveForOrder($order);
    Payment::captureForOrder($order);
});
  1. Ручне керування (за потреби)
DB::beginTransaction();

try {
    // operations
    DB::commit();
} catch (Throwable $e) {
    DB::rollBack();
    throw $e;
}
  1. Best practices
  • Тримайте транзакцію короткою й швидкою.
  • Уникайте довгих зовнішніх HTTP-викликів усередині транзакції.
  • За потреби комбінуйте з row locking для конкурентно-чутливих сценаріїв.

Транзакції критично важливі для надійних фінансових, складських і багатокрокових бізнес-процесів.

76. Які aggregate-методи доступні в query builder?

Laravel

Laravel Query Builder надає стандартні SQL-агрегації у вигляді helper-методів.

  1. Основні aggregate-методи
  • count()
  • sum($column)
  • avg($column) / average($column)
  • min($column)
  • max($column)
  1. Приклади
$totalUsers = DB::table('users')->count();
$totalRevenue = DB::table('orders')->sum('amount');
$avgOrder = DB::table('orders')->avg('amount');
$firstDate = DB::table('orders')->min('created_at');
$latestDate = DB::table('orders')->max('created_at');
  1. Разом із групуванням
  • Комбінуйте selectRaw(...) + groupBy(...) для агрегацій по групах.
  1. Чому це корисно
  • Ефективні обчислення на стороні БД.
  • Не потрібно переносити зайві рядки в пам’ять застосунку.

Агрегації — базовий інструмент для дашбордів, аналітики та бізнес-метрик API.

77. Як вивести raw SQL-запити в Laravel?

Laravel

У Laravel є кілька способів переглянути SQL і bindings залежно від глибини дебагу.

  1. toSql() + getBindings()
$query = User::where('email', 'like', '%@example.com%');

$sql = $query->toSql();
$bindings = $query->getBindings();
  1. toRawSql() (сучасний Laravel)
  • Повертає SQL із підставленими bindings для зручнішого читання.
$sql = User::where('id', 5)->toRawSql();
  1. Слухач запитів
DB::listen(function ($query) {
    logger()->debug($query->sql, $query->bindings);
});
  1. Інструменти
  • Laravel Telescope / Debugbar можуть показувати виконані запити та їхній час.

Ці підходи варто використовувати в development/debugging, а не як постійну production-вивідну логіку.

78. Поясніть query builder у Laravel.

Laravel

Laravel Query Builder — це fluent API для побудови SQL-запитів, який працює поверх PDO і нижче рівня Eloquent-моделей.

  1. Що це таке
  • БД-агностичний інтерфейс запитів через DB::table(...).
  • Підтримує select, joins, where-умови, group, order, pagination, insert/update/delete.
  1. Приклад
$users = DB::table('users')
    ->select('id', 'name', 'email')
    ->where('is_active', true)
    ->orderByDesc('created_at')
    ->limit(20)
    ->get();
  1. Чому його використовують
  • Дає більше контролю над SQL, ніж високорівневий ORM-підхід.
  • Добре підходить для звітних запитів і складних join-конструкцій.
  • Зберігає безпечну роботу з параметрами через bindings.
  1. Eloquent vs Query Builder
  • Eloquent: model-centric, багаті domain-можливості.
  • Query Builder: table/query-centric, нижчий рівень і часто “легший”.

Query Builder — базовий fluent-шар для точного SQL-контролю в Laravel.

79. Що таке chunking і коли використовувати chunk() або lazy()?

Laravel

Chunking — це обробка результатів запиту невеликими пакетами, а не завантаження всього набору в пам’ять одразу.

  1. chunk()
  • Отримує записи фіксованими порціями й виконує callback для кожного chunk.
User::query()->chunk(1000, function ($users) {
    foreach ($users as $user) {
        // process
    }
});
  1. lazy()
  • Внутрішньо теж працює через порції, але назовні дає єдиний lazy-потік.
  • Зручніший для pipeline-style коду.
User::query()->lazy(1000)->each(function (User $user) {
    // process
});
  1. Коли що обирати
  • chunk() — коли потрібна явна обробка “пакет за пакетом”.
  • lazy() — коли потрібен гнучкий потоковий fluent-процес.
  1. Важлива примітка
  • Якщо ви оновлюєте записи під час ітерації, віддавайте перевагу ID-орієнтованим варіантам (chunkById, lazyById), щоб уникнути пропусків/дублів.

Chunking — базова практика для обробки великих наборів даних із контрольованим споживанням пам’яті.

80. Яке призначення методу cursor()?

Laravel

cursor() повертає lazy-ітератор результатів, що дозволяє проходити записи по одному з мінімальним використанням пам’яті.

  1. Навіщо використовувати
  • Щоб не завантажувати весь результат запиту в RAM.
  • Щоб ефективно обробляти великі таблиці.
  1. Приклад
foreach (User::where('is_active', true)->cursor() as $user) {
    // process user
}
  1. Характеристики
  • Ітерація на базі генератора.
  • Добре підходить для read/process-пайплайнів.
  • Ефективний у queue/long-running job сценаріях.
  1. Коли це не ідеально
  • Якщо потрібен випадковий доступ до всіх результатів одразу.
  • Якщо потрібна важка eager-завантажена графова структура для всього набору.

cursor() — ключовий інструмент масштабованої обробки записів “рядок за рядком”.

81. Що таке Lazy Collections?

Laravel

Lazy Collections обробляють елементи як потік (на базі генераторів), а не завантажують усі дані в пам’ять одразу.

  1. Ключова властивість
  • Пам’яткоефективна ітерація великих наборів даних.
  1. Як це працює
  • Елементи генеруються та обробляються по одному.
  • Ланцюжок трансформацій виконується ліниво, під час ітерації.
  1. Типові джерела
  • lazy() у запитах.
  • cursor() в Eloquent/query builder.
  • Кастомні генератори, обгорнуті в LazyCollection.
  1. Коли використовувати
  • Скрипти міграції даних.
  • Великі експорт/імпорт процеси.
  • Фонові задачі з мільйонами рядків.
  1. Компроміс
  • Частина операцій колекцій, що вимагає повної матеріалізації, менш зручна для lazy-підходу.

Lazy Collections ідеальні там, де безпека пам’яті важливіша за random access.

82. У чому різниця між масивами й колекціями?

Laravel

Масиви — це нативна структура даних PHP, а колекції — об’єктні обгортки з fluent API для трансформацій.

  1. Масиви
  • Швидка нативна структура.
  • Доступ через синтаксис мови.
  • Менше високорівневих інструментів трансформації “з коробки”.
  1. Колекції
  • Об’єкти Illuminate\Support\Collection.
  • Chainable-методи: map, filter, reduce, sortBy, groupBy тощо.
  • Виразніші й читабельніші для складних пайплайнів обробки даних.
  1. Приклад
$names = collect($users)
    ->filter(fn ($u) => $u->is_active)
    ->pluck('name')
    ->values();
  1. Коли що використовувати
  • Масиви — для простих, низькорівневих операцій.
  • Колекції — для читабельності та композиційних трансформацій.

Колекції дають невеликий оверхед, але значно кращу ергономіку в прикладному коді.

83. Що таке Eloquent Collections?

Laravel

Eloquent Collections — це спеціалізовані колекції, які повертаються Eloquent-запитами й розширюють базову Collection можливостями, орієнтованими на моделі.

  1. Що це таке
  • Повертаються методами на кшталт get() та під час завантаження relationships.
  • Містять екземпляри моделей, а не звичайні масиви.
  1. Додаткові можливості
  • Наслідують багатий API колекцій (map, filter, groupBy, pluck тощо).
  • Додають Eloquent-специфічні helper-и: load(), loadMissing(), modelKeys(), fresh().
  1. Приклад
$users = User::where('is_active', true)->get(); // Eloquent Collection
$emails = $users->pluck('email');
  1. Чому це корисно
  • Виразні post-query трансформації.
  • Зручні пакетні операції над наборами моделей.

Eloquent Collections поєднують ORM-обізнаність із функціональним стилем обробки даних.

84. Які головні переваги Laravel порівняно з іншими PHP-фреймворками?

Laravel

Головні переваги Laravel пов’язані з сильним developer experience, багатою вбудованою функціональністю та великим екосистемним оточенням.

  1. Зручність для розробника
  • Послідовний і виразний дизайн API в компонентах фреймворку.
  • Якісна документація та простий онбординг.
  • Швидке створення каркасу застосунку й CLI-процеси через Artisan.
  1. “Batteries included”
  • Першокласна підтримка маршрутизації, валідації, автентифікації, черг, подій, сповіщень, кешування та планування задач.
  • ORM (Eloquent) і міграції схеми доступні “з коробки”.
  1. Архітектура та підтримуваність
  • Сервісний контейнер і dependency injection глибоко інтегровані.
  • Middleware і service providers явно оформлюють наскрізні аспекти.
  • Сильна підтримка тестування через інтеграцію PHPUnit/Pest.
  1. Сила екосистеми
  • Офіційні інструменти: Forge, Vapor, Horizon, Telescope, Octane, Sanctum, Passport, Cashier.
  • Зрілі community-пакети та довготривала стабільність екосистеми.
  1. Операційна продуктивність
  • Зручні CI/CD і deployment-процеси.
  • Якісна підтримка черг, кешування, Redis та моніторингу.

Laravel часто обирають тоді, коли команді потрібно швидко постачати бізнес-функціонал без втрати якості коду та довгострокової підтримуваності.

85. Як Laravel дотримується архітектури MVC?

Laravel

Laravel дотримується MVC (Model-View-Controller), розділяючи доменну/дану логіку, обробку запиту та презентаційний шар.

  1. Model (M)
  • Зазвичай це Eloquent-моделі в app/Models.
  • Представляють доменні сутності та записи бази даних.
  • Містять зв’язки, scope-и, casts і доменну поведінку.
  1. View (V)
  • Blade-шаблони в resources/views.
  • Відповідають лише за відображення.
  • Отримують підготовлені дані з контролерів або view-моделей.
  1. Controller (C)
  • Класи в app/Http/Controllers.
  • Обробляють HTTP-запити, координують валідацію/сервіси й повертають відповіді.
  • Мають залишатися “тонкими”: оркестрація, а не важка бізнес-логіка.
  1. Потік запиту в термінах MVC
  • Route зіставляє URL з action контролера.
  • Контролер використовує моделі/сервіси для виконання use case.
  • Контролер повертає view (HTML) або JSON-відповідь (API).

Laravel також підтримує service-класи, actions, repositories і доменні шари поверх MVC для більших застосунків.

86. Опишіть життєвий цикл запиту в застосунку Laravel.

Laravel

Життєвий цикл запиту в Laravel описує, як вхідний HTTP-запит перетворюється на HTTP-відповідь.

  1. Точка входу
  • Вебсервер спрямовує запити в public/index.php.
  • Завантажуються Composer autoloader і bootstrap Laravel-застосунку.
  1. Запуск HTTP kernel
  • Ініціалізується сервісний контейнер.
  • Готуються global і route middleware-ланцюжки.
  1. Service providers
  • Провайдери реєструються та boot-яться.
  • Стають доступними core-сервіси й прив’язки застосунку.
  1. Фаза маршрутизації
  • Router знаходить маршрут за методом + URI.
  • Виконується middleware pipeline маршруту.
  1. Виконання контролера/обробника
  • Викликається action контролера, closure або invokable-клас.
  • Залежності автоматично резолвляться з контейнера.
  • Виконуються валідація, авторизація, бізнес-логіка та доступ до даних.
  1. Формування відповіді
  • Обробник повертає Response, JsonResponse, view, redirect або серіалізовані дані.
  • Laravel нормалізує результат у HTTP response object.
  1. Фаза завершення
  • Відповідь надсилається клієнту.
  • Виконуються terminable middleware і post-response хуки.

Цей цикл дає Laravel передбачувану модель виконання та чіткі точки розширення.

87. Що таке сервісний контейнер Laravel?

Laravel

Сервісний контейнер Laravel — це IoC-контейнер (Inversion of Control), який відповідає за створення об’єктів і керування залежностями.

  1. Ключова роль
  • Централізоване місце, де класи/інтерфейси прив’язуються до конкретних реалізацій.
  • Автоматично резолвить залежності конструктора через reflection.
  1. Чому це важливо
  • Зменшує ручне “зшивання” об’єктів.
  • Дає dependency inversion (залежність від інтерфейсів, а не конкретних класів).
  • Підвищує тестованість завдяки простій заміні реалізацій (наприклад, fakes/mocks).
  1. Де використовується
  • Контролери, middleware, jobs, listeners, commands і service-класи.
  • Внутрішні механізми фреймворку та кастомна архітектура застосунку.
  1. Поширені API
  • bind() для transient-прив’язок.
  • singleton() для єдиного спільного екземпляра.
  • make() / app() для резолву сервісів.
  1. Практичний ефект
  • Чистіші конструктори, менша зв’язаність, кращий модульний дизайн.

У Laravel сервісний контейнер є однією з базових основ масштабованої архітектури застосунку.

88. Поясніть різницю між binding, singleton binding і resolving у сервісному контейнері.

Laravel

Ці терміни описують різні операції в життєвому циклі контейнера Laravel.

  1. Binding (bind)
  • Реєструє, як контейнер має створювати тип.
  • Створює новий екземпляр при кожному резолві (transient lifecycle).
$this->app->bind(PaymentGateway::class, StripeGateway::class);
  1. Singleton binding (singleton)
  • Реєструє тип як спільний екземпляр.
  • Під час першого резолву створює об’єкт, під час наступних повертає той самий.
$this->app->singleton(CacheClient::class, fn () => new CacheClient());
  1. Resolving (make / auto-injection)
  • Сам факт запиту до контейнера, щоб отримати екземпляр.
  • Може бути явним (app()->make(...)) або неявним через constructor injection.
$gateway = app()->make(PaymentGateway::class);
  1. Практичне правило
  • Використовуйте bind для stateless/легких сервісів.
  • Використовуйте singleton для спільних/важких/інфраструктурних клієнтів.
  • Віддавайте перевагу автоматичному resolving через dependency injection у класах, якими керує фреймворк.
89. Що таке contextual binding і коли його варто використовувати?

Laravel

Contextual binding дозволяє надавати різні реалізації одного інтерфейсу залежно від того, який саме клас зараз резолвиться.

  1. Яку проблему вирішує
  • Кілька споживачів потребують той самий контракт, але з різною конкретною поведінкою.
  1. Приклад сценарію
  • PhotoController має використовувати S3Filesystem.
  • ReportController має використовувати LocalFilesystem.
  • Обидва залежать від FilesystemInterface.
  1. Container API
$this->app->when(PhotoController::class)
    ->needs(FilesystemInterface::class)
    ->give(S3Filesystem::class);

$this->app->when(ReportController::class)
    ->needs(FilesystemInterface::class)
    ->give(LocalFilesystem::class);
  1. Коли використовувати
  • Multi-tenant або multi-region інтеграції.
  • Різні адаптери для різних use case.
  • Коли інтерфейсна архітектура потрібна, але глобальної прив’язки недостатньо.

Contextual binding корисний тоді, коли однієї глобальної прив’язки мало, і поведінка має відрізнятися залежно від контексту споживача.

90. Що таке Service Providers і яка їхня мета?

Laravel

Service Providers — це центральний механізм bootstrap у Laravel для реєстрації та конфігурації сервісів застосунку.

  1. Основне призначення
  • Реєструвати прив’язки в контейнері.
  • Конфігурувати сервіси пакета/застосунку під час старту.
  1. Що зазвичай розміщують у них
  • Прив’язки інтерфейсів до реалізацій.
  • Реєстрацію singleton для інфраструктурних сервісів.
  • Реєстрацію event/listener (або у спеціалізованому провайдері).
  • Bootstrap пакета й wiring конфігурації.
  1. Типові приклади
  • AppServiceProvider
  • RouteServiceProvider
  • Провайдери пакетів
  1. Чому це важливо
  • Формує передбачуваний стартовий шар застосунку.
  • Виносить bootstrap-логіку з контролерів/моделей.
  • Підвищує модульність і підтримуваність у великих проєктах.

Service Providers — фактично composition root застосунку на Laravel.

91. У чому різниця між registering і booting у service provider?

Laravel

У Service Provider методи register() і boot() виконуються на різних етапах і мають різні обов’язки.

  1. register()
  • Використовується лише для реєстрації прив’язок у контейнері.
  • Має бути без побічних ефектів і не повинен залежати від того, що сервіси інших провайдерів уже boot-нулися.
public function register(): void
{
    $this->app->singleton(PaymentGateway::class, StripeGateway::class);
}
  1. boot()
  • Виконується після того, як усі провайдери зареєстровані.
  • Використовується для дій, яким потрібні вже доступні сервіси: routes, view composers, observers, event wiring, macros.
public function boot(): void
{
    Schema::defaultStringLength(191);
}
  1. Практична відмінність
  • register() = оголошення залежностей.
  • boot() = виконання логіки інтеграції з фреймворком.

Коректне розділення цих етапів запобігає помилкам порядку ініціалізації та робить старт застосунку передбачуваним.

92. Що таке Laravel Contracts?

Laravel

Laravel Contracts — це визначені фреймворком PHP-інтерфейси, які описують можливості core-сервісів незалежно від їхніх реалізацій.

  1. Що це таке
  • Інтерфейси в просторі імен Illuminate\Contracts\....
  • Приклади: Cache\Repository, Queue\Queue, Auth\Guard, Mail\Mailer.
  1. Навіщо вони існують
  • Розв’язують ваш код від конкретних класів фреймворку.
  • Дають чистий dependency inversion і спрощують тестування.
  • Дозволяють змінювати реалізації з мінімальними змінами коду.
  1. Як використовуються
  • Type-hint контракт у конструкторі/методі.
  • Дозвольте контейнеру зарезолвити поточну реалізацію.
use Illuminate\Contracts\Cache\Repository as Cache;

final class UserService
{
    public function __construct(private Cache $cache) {}
}
  1. Практична користь
  • Більш підтримувана архітектура й чіткіші межі між шарами.
  • Кращі mocks/fakes у тестах.
  • Простіша заміна інфраструктурних деталей.

Contracts — один із ключових будівельних блоків для написання Laravel-сумісного, але implementation-agnostic коду.

93. У чому різниця між Contract і Facade?

Laravel

Contracts і Facades пов’язані з сервісами Laravel, але вирішують різні задачі.

  1. Contract
  • PHP-інтерфейс (зазвичай у Illuminate\Contracts\...).
  • Описує поведінку/можливість без деталей реалізації.
  • Використовується для dependency inversion і чистої архітектури.
  1. Facade
  • “Статичний” проксі до сервісу, який резолвиться з контейнера.
  • Дає короткий синтаксис для викликів фреймворк-сервісів.
  • Приклад: Cache::get('key'), Log::info('...').
  1. Ключова відмінність
  • Contract = абстракційна межа (залежність на рівні дизайну).
  • Facade = зручний шар доступу (викличний API-стиль).
  1. Вплив на тестування
  • Contracts легко мокати через DI.
  • Facades також можна мокати (Facade::shouldReceive()), але це все ще “статично-подібний” стиль.
  1. Коли що обирати
  • Віддавайте перевагу Contracts у domain/application сервісах.
  • Використовуйте Facades у контролерах, невеликому glue-коді або фреймворк-орієнтованих ділянках, де важлива стислість.

Коротко: Contract визначає, що робить сервіс, а Facade — наскільки зручно ви його викликаєте.

94. Поясніть різницю між Facades і helper-функціями в Laravel.

Laravel

І Facades, і helpers дають короткий синтаксис, але відрізняються структурою, прозорістю та підходом до тестування.

  1. Facades
  • Класовий статичний проксі (Cache::, DB::, Bus::).
  • Прив’язані до сервісів контейнера.
  • Підтримують facade mocking/faking API.
  • Краще IDE-discoverability через методи класу.
  1. Helper-функції
  • Глобальні функції на кшталт app(), route(), now(), config(), request(), response().
  • Дуже короткі й зручні в шаблонах/контролерах.
  • У використанні не прив’язані до імені класу.
  1. Ключові відмінності
  • Facade: явна поверхня сервісу через клас.
  • Helper: легковаговий глобальний шорткат.
  1. Тестування та архітектура
  • У core business-коді constructor DI зазвичай чистіший, ніж обидва підходи.
  • Для framework glue-коду обидва варіанти прийнятні; facades зазвичай явніші, helpers — лаконічніші.
  1. Практична рекомендація
  • В domain-сервісах надавайте перевагу DI + contracts.
  • У контролерах, jobs, views і фреймворк-інтеграціях використовуйте facades/helpers прагматично.
95. Як працює Dependency Injection у Laravel?

Laravel

Dependency Injection (DI) у Laravel працює через сервісний контейнер, який автоматично резолвить залежності класів.

  1. Ін’єкція через конструктор
  • Ви type-hint-ите залежності в конструкторі.
  • Laravel резолвить і підставляє їх під час створення класу.
final class OrderController
{
    public function __construct(private OrderService $service) {}
}
  1. Ін’єкція в метод
  • Працює в controller actions, handlers job-ів, listeners, commands тощо.
  • Параметри з type-hint можуть резолвитися автоматично.
public function store(StoreOrderRequest $request, OrderService $service): JsonResponse
{
    // ...
}
  1. Ін’єкція інтерфейсів
  • Якщо інжектите інтерфейс, прив’яжіть його до concrete-класу в provider.
$this->app->bind(PaymentGateway::class, StripeGateway::class);
  1. Чому DI важливий
  • Низька зв’язаність.
  • Просте тестування з mocks/fakes.
  • Явні залежності й краща підтримуваність.

У Laravel DI — це базовий спосіб чисто з’єднувати сервіси застосунку.

96. Як Laravel використовує IoC (Inversion of Control)?

Laravel

Laravel застосовує IoC, передаючи створення об’єктів і зв’язування залежностей сервісному контейнеру, замість жорсткого створення залежностей усередині класів.

  1. Традиційний підхід (без IoC)
  • Клас сам інстанціює залежності (new StripeGateway()), що створює сильну зв’язаність.
  1. IoC у Laravel
  • Класи оголошують потрібні абстракції (інтерфейси/типи).
  • Контейнер надає конкретні реалізації.
  1. Де це проявляється
  • Контролери, middleware, jobs, events/listeners, commands, policies, кастомні сервіси.
  • Внутрішні частини фреймворку також працюють за цим принципом.
  1. Переваги
  • Замінність реалізацій (наприклад, Stripe vs PayPal).
  • Краще unit-тестування й модульна архітектура.
  • Централізоване налаштування object graph у providers.

IoC у Laravel — архітектурна основа для DI, contracts і тестованості.

97. Що таке middleware у Laravel?

Laravel

Middleware — це класи, які перевіряють, фільтрують або трансформують HTTP-запити/відповіді під час проходження через request pipeline.

  1. Призначення
  • Виконувати наскрізну логіку до/після контролерної логіки.
  1. Типові use case
  • Перевірка автентифікації/авторизації.
  • Rate limiting.
  • CSRF-захист.
  • Логування запитів і security headers.
  • Локалізація та встановлення tenant/context.
  1. Модель виконання
  • Запит заходить у стек middleware.
  • Кожен middleware або пропускає далі ($next($request)), або зупиняє потік (повертає response/redirect/error).
  • Відповідь також може модифікуватися на зворотному шляху.
  1. Типи
  • Global middleware (для всіх запитів).
  • Route middleware (для конкретних маршрутів/груп).

Middleware дає змогу тримати контролери сфокусованими, виносячи повторювану HTTP-логіку в окремі pipeline-шари.

98. Як зареєструвати та призначити middleware?

Laravel

У сучасному Laravel middleware зазвичай конфігуруються в bootstrap-конфігурації застосунку й призначаються через alias, group або напряму через клас.

  1. Реєстрація alias/group
  • Визначте aliases і склад груп у конфігурації middleware на етапі bootstrap.
  • Типові aliases: auth, verified, throttle тощо.
  1. Global middleware
  • Додаються до global-стека й виконуються для кожного запиту.
  1. Призначення маршрутам
  • Для окремого маршруту:
Route::get('/profile', ProfileController::class)
    ->middleware('auth');
  • Для групи маршрутів:
Route::middleware(['auth', 'verified'])->group(function () {
    Route::get('/dashboard', DashboardController::class);
});
  1. Призначення через ім’я класу
  • За потреби middleware можна навішувати напряму через class name, а не alias.

Практичний підхід: використовуйте aliases для читабельності та єдиного стилю в кодовій базі.

99. Як middleware працює з параметрами?

Laravel

Laravel middleware може приймати параметри з route-оголошення, що дозволяє конфігурувати поведінку без дублювання middleware-класів.

  1. Використання в маршруті
Route::get('/admin', AdminController::class)
    ->middleware('role:admin');
  1. Сигнатура middleware
public function handle(Request $request, Closure $next, string $role): Response
{
    if (! $request->user() || ! $request->user()->hasRole($role)) {
        abort(403);
    }

    return $next($request);
}
  1. Кілька параметрів
  • Передаються через кому: middleware('throttle:60,1').
  • Middleware отримує їх як додаткові аргументи після $next.
  1. Коли це корисно
  • Перевірки ролей/прав доступу.
  • Варіанти rate limiting.
  • Feature- або tenant-обмеження залежно від route-контексту.

Параметризовані middleware підвищують повторне використання й роблять намір на рівні маршрутів явним.

100. Що таке route groups, prefixes і middleware groups?

Laravel

Групування маршрутів допомагає структурувати роутинґ і застосовувати спільні налаштування один раз.

  1. Route groups
  • Об’єднують маршрути під спільними атрибутами (middleware, prefix, name, namespace тощо).
  1. Prefixes
  • Додають URI-префікс до всіх маршрутів у групі.
Route::prefix('api/v1')->group(function () {
    Route::get('/users', [UserController::class, 'index']);
});
  1. Name prefixes
  • Додають спільний префікс до імен маршрутів.
Route::name('admin.')->group(function () {
    Route::get('/dashboard', [AdminController::class, 'dashboard'])->name('dashboard');
});
// Ім’я маршруту: admin.dashboard
  1. Middleware groups
  • Іменований набір middleware (наприклад, web, api), який можна застосувати одним викликом.
  • Зменшує повторення й стандартизує поведінку для секцій маршрутів.
  1. Чому це важливо
  • Чистіші route-файли.
  • Узгоджені правила безпеки та обробки запитів.
  • Простіша підтримка зі зростанням застосунку.
101. Що таке route model binding?

Laravel

Route model binding автоматично перетворює параметри маршруту на екземпляри Eloquent-моделей.

  1. Що це робить
  • Конвертує сегмент маршруту на кшталт {user} в об’єкт User.
  • Якщо запис не знайдено, Laravel автоматично повертає 404.
  1. Приклад
Route::get('/users/{user}', [UserController::class, 'show']);

public function show(User $user): View
{
    return view('users.show', compact('user'));
}
  1. Переваги
  • Прибирає повторюваний findOrFail() boilerplate.
  • Підвищує читабельність і type safety.
  • Дає централізований контроль над поведінкою пошуку.
  1. Розширене використання
  • Кастомні route keys (наприклад, slug).
  • Scoped/nested binding для батьківсько-дочірніх зв’язків.

Route model binding — одна з найкорисніших конвенцій Laravel для стислого й безпечного коду контролерів.

102. Поясніть implicit vs explicit route model binding.

Laravel

Обидва підходи резолвлять параметри маршруту в моделі, але відрізняються стилем конфігурації.

  1. Implicit binding
  • Laravel сам виводить прив’язку з імені параметра + type-hint.
  • Мінімум налаштувань.
Route::get('/posts/{post}', fn (Post $post) => $post);
  1. Explicit binding
  • Ви вручну визначаєте, як параметр мапиться на модель.
  • Корисно для кастомної логіки або нестандартного резолву.
Route::bind('post', function (string $value) {
    return Post::where('slug', $value)->firstOrFail();
});
  1. Коли що обирати
  • За замовчуванням використовуйте implicit binding (чисто й конвенційно).
  • Explicit binding застосовуйте для особливих правил пошуку, трансформацій або edge case.
  1. Пов’язане налаштування
  • У багатьох випадках достатньо перевизначити getRouteKeyName() у моделі (наприклад, для slug), без повного explicit binding.

Implicit = автоматична прив’язка за конвенцією. Explicit = ручний контроль логіки прив’язки.

103. Що таке rate limiting у Laravel і як він працює?

Laravel

Rate limiting обмежує кількість запитів, які клієнт може виконати за певний проміжок часу, щоб захистити API від зловживань і перевантаження.

  1. Що він робить
  • Обмежує частоту запитів за ключем (ID користувача, IP, токен або кастомний ідентифікатор).
  • Повертає 429 Too Many Requests, якщо ліміт перевищено.
  1. Як Laravel це реалізує
  • Використовує іменовані лімітери, визначені через RateLimiter::for(...).
  • Застосовує лімітер через middleware (зазвичай throttle).
  • Зберігає лічильники в cache-backend (Redis/Memcached/database cache залежно від конфігурації).
  1. Базовий приклад
RateLimiter::for('api', function (Request $request) {
    return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip());
});
  1. Де застосовувати
  • Публічні API-ендпоінти.
  • Login, OTP, reset password та інші чутливі ендпоінти.
  • Дорогі операції (пошук, експорт, генерація звітів).
  1. Чому це важливо
  • Підвищує надійність і справедливість доступу.
  • Зменшує ризики brute-force атак і наслідки пікового трафіку.
104. Що таке invokable controllers?

Laravel

Invokable controllers — це контролери з одним методом __invoke(), які призначені для виконання однієї конкретної дії.

  1. Структура
final class PublishPostController
{
    public function __invoke(Post $post): JsonResponse
    {
        // ...
    }
}
  1. Маршрутизація
Route::post('/posts/{post}/publish', PublishPostController::class);
  1. Переваги
  • Дуже сфокусована відповідальність.
  • Чистіше зіставлення route-to-action.
  • Добре поєднується з action-орієнтованою архітектурою.
  1. Коли корисно
  • Ендпоінти з чіткою єдиною метою.
  • CQRS/action-based стиль.
  • Великі кодові бази, де менші класи покращують навігацію.

Invokable controllers — практичний спосіб тримати HTTP-шар явним і модульним.

105. Що таке Single Action Controllers?

Laravel

Single Action Controllers — це той самий підхід, що й invokable controllers: один клас контролера обробляє одну дію через метод __invoke().

  1. Ключова ідея
  • Один клас = один use case.
  • Без набору методів index/store/update в одному контролері.
  1. Чому команди це використовують
  • Краще розділення відповідальностей.
  • Простішe тестування кожного ендпоінта.
  • Менше merge-конфліктів у великих командах.
  1. Приклади use case
  • ApproveInvoiceController
  • SendWelcomeEmailController
  • GenerateReportController
  1. Компроміс
  • Більше файлів/класів.
  • Але зазвичай краща довгострокова підтримуваність для середніх і великих проєктів.

Single Action Controllers — це передусім архітектурний стиль, який ставить акцент на ясність і масштабованість.

106. У чому різниця між Resource Controllers і API Resource Controllers?

Laravel

Різниця переважно в наборі згенерованих action-ів і в цільовому форматі відповіді.

  1. Resource Controller (Route::resource)
  • Генерує повний web CRUD-набір маршрутів: index, create, store, show, edit, update, destroy.
  • Містить маршрути create і edit, зазвичай для HTML-форм/сторінок.
  1. API Resource Controller (Route::apiResource)
  • Генерує API-орієнтований CRUD-набір: index, store, show, update, destroy.
  • Не містить create і edit (UI-сторінки форм для API зазвичай не потрібні).
  1. Типове використання
  • resource: server-rendered вебзастосунки.
  • apiResource: JSON API, mobile backend, SPA backend.
  1. Пов’язаний концепт
  • API-відповіді часто формуються через JsonResource для узгодженого контракту даних.
107. Як створювати кастомні Artisan-команди?

Laravel

Кастомні Artisan-команди — це CLI-класи для автоматизації, обслуговування, імпортів і операційних процесів.

  1. Згенеруйте клас команди
php artisan make:command SyncInvoicesCommand
  1. Визначте signature і description
protected $signature = 'billing:sync {--dry-run}';
protected $description = 'Sync invoices from billing provider';
  1. Реалізуйте логіку в handle()
public function handle(): int
{
    // command logic
    return self::SUCCESS;
}
  1. Використовуйте DI у команді
  • Інжектіть сервіси через конструктор або через резолв у методі.
  1. Запускайте команду
php artisan billing:sync --dry-run
  1. Опціонально: планування
  • Зареєструйте команду в scheduler, щоб запускати її автоматично.

Кастомні команди ідеально підходять для повторюваних backend-операцій та DevOps-автоматизації.

108. Що таке macros і коли вони корисні?

Laravel

Macros дозволяють додавати власні методи до класів фреймворку під час виконання (до macroable-класів) без зміни вихідного коду Laravel.

  1. Поширені macroable-цілі
  • Collection, Str, ResponseFactory, Route тощо.
  1. Приклад
use Illuminate\Support\Collection;

Collection::macro('toKeyValue', function (string $key, string $value) {
    return $this->mapWithKeys(fn ($item) => [$item[$key] => $item[$value]]);
});
  1. Коли корисно
  • Повторювана утилітарна логіка по всій кодовій базі.
  • Domain-specific helper-методи для колекцій/рядків.
  • Більш виразний API для типових трансформацій.
  1. Best practices
  • Реєструйте macros у service provider.
  • Обирайте чіткі назви, щоб уникати колізій.
  • Не зловживайте: для складної поведінки краще окремі класи.

Macros найкраще підходять для невеликих, часто вживаних розширень фреймворку.

109. Що таке Actions в архітектурі Laravel і коли їх використовувати?

Laravel

Actions — це сфокусовані класи, які інкапсулюють один бізнесовий use case (одну прикладну операцію).

  1. Що таке Action
  • Клас на кшталт CreateOrderAction, PublishPostAction, RefundPaymentAction.
  • Зазвичай має один метод (handle() або execute()).
  1. Навіщо використовувати Actions
  • Забирають бізнес-логіку з контролерів/моделей.
  • Повторно використовуються з HTTP-контролерів, jobs, console-команд і listeners.
  • Легше unit-тестуються завдяки чітким вхідним/вихідним контрактам.
  1. Типова структура
final class CreateOrderAction
{
    public function __construct(private OrderRepository $orders) {}

    public function handle(CreateOrderData $data): Order
    {
        // business logic
    }
}
  1. Коли використовувати
  • Нетипові або нетривіальні use case з оркестрацією правил.
  • Логіка, що використовується з кількох точок входу.
  • Команди, які застосовують service/action або CQRS-подібну архітектуру.

Actions покращують модульність і роблять бізнесові workflows явними.

110. Поясніть Repository Pattern і його переваги.

Laravel

Repository Pattern абстрагує доступ до даних через інтерфейси, щоб бізнес-логіка не була жорстко прив’язана до ORM/деталей запитів.

  1. Базова ідея
  • Визначаєте контракт (наприклад, OrderRepository).
  • Надаєте реалізацію (наприклад, EloquentOrderRepository).
  • Інжектите репозиторій у сервіси/actions.
  1. Переваги
  • Чітке розділення між domain/application логікою та persistence-шаром.
  • Простішe тестування через fake/in-memory репозиторії.
  • Централізація складної query-логіки та caching-стратегій.
  • Легша заміна джерела даних у майбутньому.
  1. Компроміси
  • Додатковий шар абстракції й більше boilerplate-коду.
  • Не завжди виправданий для дуже простих CRUD-застосунків.
  1. Прагматична рекомендація
  • Використовуйте репозиторії там, де доступ до даних складний або спільний для багатьох модулів.
  • Уникайте over-engineering у простих секціях системи.

Repository Pattern цінний тоді, коли реально зменшує зв’язаність і складність, а не просто додає indirection.

111. Що таке Traits у PHP і як вони використовуються в Laravel?

Laravel

Traits — це мовний механізм PHP для горизонтального повторного використання коду між класами без спадкування.

  1. Що дають traits
  • Повторно використовувані методи/властивості через use.
  • Спільну поведінку для класів, які не мають спільної ієрархії.
  1. Приклади використання в Laravel
  • Фреймворкові traits, такі як SoftDeletes, HasFactory, Notifiable, AuthorizesRequests, DispatchesJobs, ValidatesRequests.
  1. Приклад у моделі
use Illuminate\Database\Eloquent\SoftDeletes;

class Post extends Model
{
    use SoftDeletes;
}
  1. Best practices
  • Тримайте traits невеликими й цілісними.
  • Використовуйте їх для повторного використання поведінки, а не для маскування “роздутого” класу.
  • Для складної domain-логіки віддавайте перевагу композиції/сервісам.

Traits — практичний механізм реюзу, який широко застосовується в Laravel internals і прикладному коді.

112. У чому різниця між Laravel і Lumen, і чи актуальний Lumen у 2026 році?

Laravel

Laravel і Lumen мають спільне походження, але орієнтовані на різні архітектурні компроміси.

  1. Головні відмінності
  • Laravel: повнофункціональний фреймворк (багата екосистема, first-party пакети, широкі конвенції, велика інтеграційність).
  • Lumen: micro-framework варіант із фокусом на мінімалізм і простіші API-сценарії.
  1. Архітектура та екосистема
  • Laravel має ширшу сумісність із first-party пакетами й повніший набір інструментів для розробки.
  • Lumen навмисно “тонший” і не прагне повної сумісності з усією surface-областю пакетів Laravel.
  1. Контекст продуктивності
  • Історично Lumen обирали для легковагових API.
  • У сучасних версіях Laravel продуктивність суттєво покращилась, тому практичний розрив для багатьох навантажень зменшився.
  1. Чи актуальний Lumen у 2026 році?
  • Для нових проєктів: зазвичай не рекомендований як базовий вибір в екосистемі Laravel.
  • Для існуючих систем: залишається актуальним, якщо вже стабільно працює в продакшені.
  • Типовий вибір у 2026: Laravel (з правильною оптимізацією) для більшості нових API та web backend-ів.
  1. Практичне правило вибору
  • Нові продукти стартуйте на Laravel.
  • Lumen залишайте переважно для підтримки legacy-сервісів із чіткими операційними причинами.
113. Що таке Eloquent ORM?

Laravel

Eloquent ORM — це реалізація Active Record у Laravel для роботи з базою даних через PHP-об’єкти, а не через сирий SQL.

  1. Що він надає
  • Відображення model-to-table.
  • Інтеграцію з query builder.
  • Керування зв’язками між моделями.
  • Attribute casting, accessors/mutators, scopes, events.
  1. Чому команди його використовують
  • Швидша розробка завдяки виразному синтаксису.
  • Чистіший domain-код для типових CRUD-сценаріїв.
  • Вбудовані конвенції, що зменшують boilerplate.
  1. Приклад
$users = User::query()
    ->where('is_active', true)
    ->latest()
    ->take(10)
    ->get();
  1. Важливе зауваження
  • Eloquent чудово підходить для більшості прикладних задач.
  • Для вузькоспеціальних/звітних запитів query builder або raw SQL інколи кращі.

Eloquent — базовий data-access шар у більшості Laravel-застосунків.

114. Що таке Eloquent Models?

Laravel

Eloquent Models — це PHP-класи, які представляють таблиці бази даних та інкапсулюють поведінку даних.

  1. Базова роль
  • Кожна модель зазвичай мапиться на одну таблицю.
  • Екземпляри моделі представляють окремі рядки таблиці.
  1. Що зазвичай містять моделі
  • Fillable/guarded атрибути.
  • Casts і роботу з датами.
  • Relationships.
  • Scopes і domain-specific методи.
  1. Базовий приклад
final class Post extends Model
{
    protected $fillable = ['title', 'body', 'published_at'];

    protected function casts(): array
    {
        return [
            'published_at' => 'datetime',
        ];
    }
}
  1. Чому це важливо
  • Централізують persistence-логіку та поведінку сутності.
  • Підвищують читабельність і узгодженість операцій із даними.

Eloquent-моделі — ключові будівельні блоки database-driven застосунків на Laravel.

115. Поясніть one-to-one, one-to-many, many-to-many і polymorphic relationships.

Laravel

Eloquent-зв’язки визначають, як моделі пов’язані між собою в структурі даних.

  1. One-to-one (hasOne / belongsTo)
  • Один запис пов’язаний рівно з одним записом.
  • Приклад: User має один Profile.
  1. One-to-many (hasMany / belongsTo)
  • Один батьківський запис має багато дочірніх.
  • Приклад: Post має багато Comment.
  1. Many-to-many (belongsToMany)
  • Обидві сторони можуть мати багато пов’язаних записів.
  • Потребує pivot-таблиці.
  • Приклад: User належить багатьом Role.
  1. Polymorphic
  • Модель може належати більш ніж одному типу батьківської моделі через спільний інтерфейс.
  • Приклад: Comment може належати Post або Video.
  1. Чому це важливо
  • Зв’язки чітко відображають структуру домену.
  • Eloquent може завантажувати пов’язані дані, обмежувати запити й спрощувати join-операції.

Правильний вибір типу зв’язку — ключ до чистого дизайну схеми та ефективних запитів.

116. Що таке polymorphic relationships і коли їх використовувати?

Laravel

Polymorphic relationships дозволяють одній моделі бути пов’язаною з кількома типами моделей через одну пару колонок (зазвичай *_type і *_id).

  1. Як це працює
  • Дочірня таблиця зберігає тип батьківської моделі + її ID.
  • Одна дочірня модель може посилатися на різні батьківські моделі.
  1. Типові приклади
  • Comment для Post, Video, Product.
  • Image для User, Team, Article.
  • Activity для кількох типів сутностей.
  1. Методи зв’язків у Laravel
  • morphTo на дочірній моделі.
  • morphMany / morphOne на батьківській моделі.
  • morphToMany / morphedByMany для polymorphic many-to-many.
  1. Коли використовувати
  • Коли поведінка спільна для різнорідних батьківських сутностей.
  • Коли потрібна одна універсальна дочірня таблиця замість кількох паралельних.
  1. Компроміс
  • Більш гнучка схема, але інколи складніші запити й вищі вимоги до індексації.

Використовуйте polymorphic-зв’язки там, де вони справді зменшують дублювання і природно відповідають доменній моделі.

117. Що таке eager loading?

Laravel

Eager loading означає, що пов’язані моделі завантажуються наперед у межах основного запиту, а не підтягуються пізніше для кожного елемента окремо.

  1. Як це робиться
$posts = Post::with(['author', 'comments'])->latest()->get();
  1. Чому це важливо
  • Зменшує загальну кількість SQL-запитів.
  • Запобігає проблемі N+1.
  • Покращує час відповіді й ефективність роботи БД.
  1. Корисні варіанти
  • Nested eager loading: with('comments.user').
  • Constrained eager loading через closures.
  • Default eager loading через $with у моделі, якщо зв’язок потрібен майже завжди.

Eager loading — одна з базових практик оптимізації продуктивності в Eloquent.

118. Що таке проблема N+1 і як її вирішити?

Laravel

Проблема N+1 виникає, коли виконується 1 запит на список записів, а потім ще по одному запиту на кожен елемент для пов’язаних даних.

  1. Типовий сценарій
  • Ви отримали 100 постів.
  • У циклі звертаєтесь до $post->author.
  • У підсумку маєте 101 запит (1 + 100).
  1. Чому це погано
  • Різко зростає кількість запитів.
  • Підвищується latency і навантаження на БД.
  • Погіршується масштабованість під трафіком.
  1. Як вирішити в Laravel
  • Використовувати eager loading через with().
$posts = Post::with('author')->get();
  • Використовувати load() / loadMissing(), якщо колекція моделей уже отримана.
  • Застосовувати профайлінг (Telescope/Debugbar/логи) для виявлення “гарячих” місць.
  1. Best practice
  • Плануйте потрібні зв’язки на етапі побудови запиту.
  • Перевіряйте цикли по моделях на приховані lazy-load виклики.

Усунення N+1 — одна з найефективніших оптимізацій продуктивності в Eloquent.

119. Що таке lazy eager loading?

Laravel

Lazy eager loading завантажує зв’язки після того, як моделі вже отримані, але все одно пакетно, а не по одній моделі.

  1. Коли використовується
  • Ви спочатку отримали моделі.
  • Пізніше вирішили, які саме зв’язки потрібно підтягнути.
  1. Методи
  • load() завантажує вказані зв’язки.
  • loadMissing() завантажує лише ті, що ще не завантажені.
$posts = Post::latest()->take(50)->get();
$posts->load('author', 'comments');
  1. Чому це корисно
  • Уникає N+1, зберігаючи гнучкий контроль потоку.
  • Підходить для умовної логіки або шарованих сервісів.
  1. Різниця з eager loading
  • Eager loading: with() до виконання SQL-запиту.
  • Lazy eager loading: load() після виконання SQL-запиту.

Lazy eager loading — практичний компроміс між гнучкістю та продуктивністю.

120. Що таке global scopes і local scopes?

Laravel

Scopes — це повторно використовувані обмеження запитів в Eloquent.

  1. Global scopes
  • Автоматично застосовуються до всіх запитів моделі.
  • Підходять для наскрізних правил (наприклад, tenant isolation, soft delete поведінка, active-only записи).
  1. Local scopes
  • Викликаються явно в запитах, коли потрібно.
  • Дають сфокусовані повторно використовувані фільтри.
public function scopePublished(Builder $query): Builder
{
    return $query->whereNotNull('published_at');
}

$posts = Post::published()->get();
  1. Коли що обирати
  • Global scope: дефолтне бізнес-правило, яке має діяти майже всюди.
  • Local scope: опційний фільтр для конкретних use case.
  1. Застереження
  • Надмірне використання global scopes може “ховати” дані неочікувано; документуйте їх явно.

Scopes покращують узгодженість і прибирають дублювання умов у запитах.

121. Що таке query scopes?

Laravel

Query scopes — це методи моделі, які інкапсулюють повторно використовувані обмеження запиту для чистішого та композиційного query-коду.

  1. Патерн local query scope
  • Ім’я методу починається з scope.
  • У виклику префікс не використовується.
public function scopeActive(Builder $query): Builder
{
    return $query->where('is_active', true);
}

public function scopeRecent(Builder $query): Builder
{
    return $query->latest('created_at');
}

$users = User::active()->recent()->get();
  1. Переваги
  • Повторне використання фільтрів.
  • Краща читабельність query-chain.
  • Централізація логіки умов.
  1. Практичне застосування
  • Фільтри статусів (active, published, archived).
  • Діапазони дат (recent, betweenDates).
  • Бізнес-обмеження (visibleTo, forTenant).

Query scopes — ключовий інструмент для виразних і підтримуваних Eloquent-запитів.

122. Що таке accessors і mutators?

Laravel

Accessors і mutators визначають, як атрибути моделі трансформуються при читанні та записі.

  1. Accessor
  • Трансформує значення, коли воно зчитується з моделі.
  1. Mutator
  • Трансформує значення перед записом у модель.
  1. Сучасний стиль (Attribute)
use Illuminate\Database\Eloquent\Casts\Attribute;

protected function title(): Attribute
{
    return Attribute::make(
        get: fn (string $value) => ucfirst($value),
        set: fn (string $value) => strtolower(trim($value)),
    );
}
  1. Типові use case
  • Нормалізація вводу (trim/форматування регістру).
  • Представлення обчислених/відформатованих значень.
  • Трансформації на кшталт шифрування/дешифрування.
  1. Різниця з casts
  • Casts покривають типові перетворення типів.
  • Accessors/mutators покривають кастомні, domain-specific трансформації.

Вони допомагають централізувати логіку перетворення атрибутів і робити її послідовною.

123. Що таке casts в Eloquent?

Laravel

Casts визначають, як Eloquent автоматично перетворює атрибути моделі між “сирими” значеннями БД і PHP-типами.

  1. Що роблять casts
  • Конвертують значення під час читання/запису.
  • Роблять роботу з атрибутами послідовною й типобезпечною.
  1. Поширені типи casts
  • integer, float, decimal:2, boolean
  • datetime, immutable_datetime
  • array, json, object, collection
  • encrypted, hashed
  1. Приклад
protected function casts(): array
{
    return [
        'is_active' => 'boolean',
        'price' => 'decimal:2',
        'meta' => 'array',
        'published_at' => 'datetime',
    ];
}
  1. Чому це важливо
  • Менше ручного коду для парсингу/форматування.
  • Менше неочевидних помилок типів.
  • Краща читабельність domain-коду.

Casts — фундаментальна можливість для чистого керування атрибутами моделей.

124. Що таке Attribute objects у сучасному Laravel?

Laravel

Attribute objects — це сучасний спосіб визначати accessors і mutators в одному місці для конкретного поля моделі.

  1. Базова ідея
  • Метод повертає Attribute::make(get: ..., set: ...).
  • Чітко інкапсулює read/write-трансформації.
  1. Приклад
use Illuminate\Database\Eloquent\Casts\Attribute;

protected function name(): Attribute
{
    return Attribute::make(
        get: fn (string $value) => ucwords($value),
        set: fn (string $value) => strtolower(trim($value)),
    );
}
  1. Переваги
  • Чистіше, ніж legacy-методи getXxxAttribute / setXxxAttribute.
  • Getter і setter-логіка згрупована в одному методі.
  • Простіше читати, тестувати та підтримувати.
  1. Коли використовувати
  • Кастомне форматування, нормалізація, шифрування або мапінг на value object для конкретних атрибутів.

Attribute objects — рекомендований сучасний патерн для accessors/mutators у поточних версіях Laravel.

125. Як реалізувати WebSockets у Laravel?

Laravel

У Laravel WebSockets зазвичай реалізують через зв’язку Broadcasting + Reverb (або сумісну websocket-інфраструктуру) + Echo на фронтенді.

  1. Налаштування backend
  • Сконфігурувати broadcasting driver і websocket server.
  • Описати broadcastable events та авторизацію каналів.
  1. Налаштування frontend
  • Ініціалізувати Laravel Echo з websocket-конектором.
  • Підписатися на канали й слухати події.
  1. Безпека каналів
  • Для захищених потоків використовувати private/presence канали.
  1. Операційні аспекти
  • Масштабувати websocket-інстанси під навантаження.
  • Моніторити кількість з’єднань, частоту повідомлень і reconnect-поведінку.
  1. Типові сценарії
  • Realtime-сповіщення, чат, колаборація, live-дашборди.

У сучасному Laravel зв’язка Reverb + Echo є стандартним first-party шляхом для WebSocket-функціоналу.

126. У чому різниця між feature tests і unit tests?

Laravel

Feature-тести й unit-тести відрізняються насамперед рівнем охоплення та глибиною інтеграції.

  1. Unit tests
  • Перевіряють невеликий ізольований фрагмент логіки (клас/метод).
  • Зазвичай мають мінімум framework-контексту.
  • Залежності часто мокаються.
  1. Feature tests
  • Перевіряють поведінку системи через фреймворкові межі.
  • Часто охоплюють маршрути, middleware, валідацію, БД, auth і структуру відповіді.
  1. Коли що застосовувати
  • Unit tests: складна чиста бізнес-логіка.
  • Feature tests: ключові user/API-флоу та інтеграційна впевненість.
  1. Практичний баланс
  • Комбінуйте обидва підходи: unit для швидких точкових перевірок, feature для end-to-end поведінки.

Unit-тест відповідає на питання “чи правильно працює цей компонент?”, feature-тест — “чи правильно працює сценарій у системі?”.

127. Як factories покращують тестування?

Laravel

Factories роблять тести коротшими, зрозумілішими та стабільнішими завдяки швидкій генерації реалістичних даних.

  1. Менше рутинного setup
  • Не потрібно вручну готувати великі масиви тестових даних.
  1. Сценарність через states
  • Можна легко задавати варіації (admin, inactive, paid тощо).
  1. Зручні зв’язки
  • Просто створювати пов’язані моделі для інтеграційних кейсів.
  1. Підтримуваність
  • Централізована генерація даних зменшує дублювання в тестах.

Factories дозволяють фокусуватися на поведінці системи, а не на технічній підготовці фікстур.

128. Як factories покращують тестування?

Laravel

Factories значно спрощують підготовку даних у тестах і роблять тести читабельнішими.

  1. Менше boilerplate
  • Не потрібно вручну створювати великі масиви фікстур для кожного тесту.
  1. Краща виразність
  • Через states легко описати потрібний сценарій (admin, inactive, paid тощо).
  1. Робота зі зв’язками
  • Зручно створювати модельні графи (for(), has()) для інтеграційних кейсів.
  1. Швидша підтримка тестів
  • Централізовані правила генерації даних зменшують дублювання й вартість змін.

Factories дозволяють тестам фокусуватися на поведінці, а не на рутинній підготовці даних.

129. Як factories покращують тестування?

Laravel

Factories спрощують підготовку тестових даних і роблять тести читабельнішими.

  1. Менше boilerplate для створення моделей.
  2. Зручні states для різних сценаріїв.
  3. Просте створення зв’язків між моделями.
  4. Централізована генерація даних полегшує підтримку тестів.

Factories дозволяють фокусувати тести на поведінці, а не на рутинному setup.

130. Як тестувати API в Laravel?

Laravel

API в Laravel тестують через HTTP test helpers із перевіркою статусів, JSON-контрактів і побічних ефектів.

  1. Використовуйте getJson, postJson, putJson, deleteJson.
  2. Перевіряйте статуси та структуру/фрагменти JSON.
  3. Покривайте auth/authorization сценарії.
  4. Перевіряйте зміни в БД і side effects.

Повноцінний API-тест має включати happy-path, validation errors і forbidden/unauthorized кейси.

131. Як fake-нути queues, events, notifications і mail у тестах?

Laravel

Laravel надає вбудовані fakes, щоб перевіряти dispatch/send без виконання реальних побічних дій.

  1. Queue fake
Queue::fake();
Queue::assertPushed(SendInvoiceJob::class);
  1. Event fake
Event::fake();
Event::assertDispatched(OrderPaid::class);
  1. Notification fake
Notification::fake();
Notification::assertSentTo($user, InvoicePaidNotification::class);
  1. Mail fake
Mail::fake();
Mail::assertSent(InvoicePaidMail::class);

Fakes пришвидшують тести й роблять їх детермінованими.

132. Що таке Pest PHP і чому він популярний у Laravel?

Laravel

Pest — це тестовий фреймворк поверх PHPUnit із лаконічним синтаксисом і сильною інтеграцією в Laravel-екосистему.

  1. Виразніший і коротший синтаксис тестів.
  2. Менше шаблонного коду.
  3. Збереження сумісності з PHPUnit.
  4. Кращий developer experience для команд.

Pest популярний, бо прискорює написання/читання тестів без втрати надійності.

133. Як мокати Facades?

Laravel

Facades у Laravel можна мокати напряму через вбудовані mock-можливості.

  1. Базовий приклад
Cache::shouldReceive('put')
    ->once()
    ->with('key', 'value', 60);
  1. Для чого це корисно
  • Перевірити, що facade-метод викликано з правильними аргументами.
  • Підставити контрольовані повернення в тесті.
  1. Архітектурна порада
  • У core-бізнес логіці часто краще DI + mock інтерфейсу.
  • Facade mocking зручний для framework glue-коду.

Facade mocking — практичний інструмент, але для критичного доменного коду DI зазвичай стабільніший.

134. Як мокати Facades?

Laravel

Facades у Laravel можна мокати напряму через вбудований mock-API.

  1. Базовий приклад
Cache::shouldReceive('put')
    ->once()
    ->with('key', 'value', 60);
  1. Коли це корисно
  • Перевірити, що facade-метод був викликаний з очікуваними аргументами.
  • Повернути контрольоване значення в тесті.
  1. Практична порада
  • Для core-доменної логіки зазвичай краще DI + моки інтерфейсів.
  • Facade mocking добре підходить для framework glue-коду.

Facade mocking зручний, але не має підміняти архітектурно чистий dependency injection там, де він доречний.

135. Як тестувати queued jobs?

Laravel

Тестування queued jobs зазвичай ділиться на дві частини: перевірка dispatch та перевірка логіки виконання.

  1. Dispatch-перевірка
  • Queue::fake() + Queue::assertPushed(...).
  1. Перевірка логіки job
  • Окремо тестуйте handle() з моками залежностей.
  1. Retry/failure сценарії
  • Перевіряйте ідемпотентність та поведінку при помилках.

Такий поділ робить тести точнішими: окремо orchestration, окремо business logic.

136. Як тестувати events і listeners?

Laravel

Events/listeners варто тестувати окремо на dispatch і на реакцію обробника.

  1. Dispatch
  • Event::fake() + Event::assertDispatched(...).
  1. Listener behavior
  • Тестуйте side effects listener-а (БД, mail, jobs, notifications).
  1. Queued listeners
  • Перевіряйте, що обробка стає в чергу, коли це очікується.

Це дає впевненість і в події, і в бізнес-реакції на неї.

137. Що таке parallel testing?

Laravel

Parallel testing запускає тести в кількох процесах одночасно, щоб скоротити загальний час виконання.

  1. Тести діляться між worker-процесами.
  2. Кожен процес виконує свою частину suite паралельно.
  3. Вимагає коректної ізоляції ресурсів (особливо БД).

Parallel testing значно пришвидшує CI і локальний feedback loop для великих проєктів.

138. Як покращити продуктивність тестів?

Laravel

Покращення продуктивності тестів — це баланс між швидкістю та довірою до результатів.

  1. Тримайте healthy mix unit + feature тестів.
  2. Використовуйте parallel testing.
  3. Мінімізуйте важкі setup-кроки.
  4. Фейкайте дорогі зовнішні side effects.
  5. Профілюйте повільні тести та усувайте hot spots.

Найбільший ефект дає фокус на ізоляцію, простоту та вимірювання.

139. Які переваги використання Vue.js з Laravel?

Laravel

Vue.js добре поєднується з Laravel завдяки простій інтеграції та високій швидкості розробки.

  1. Проста інтеграція через Vite.
  2. Зручний компонентний підхід для динамічного UI.
  3. Гарна сумісність з Inertia або API-driven SPA.

Це практичний full-stack вибір для багатьох продуктів на Laravel.

140. Що таке Inertia.js і як він працює?

Laravel

Inertia.js дозволяє будувати SPA-подібний UX без окремого публічного API-шару для сторінок.

  1. Laravel-контролер повертає назву frontend-компонента + props.
  2. Inertia на клієнті робить навігацію без повного перезавантаження.
  3. UI пишеться на Vue/React/Svelte, а backend routing лишається в Laravel.

Inertia поєднує переваги моноліту та сучасного frontend UX.

141. Що таке Livewire і коли його використовувати?

Laravel

Livewire — це Laravel-first підхід до створення динамічного UI через server-driven компоненти без потреби у великому custom JavaScript.

  1. Як працює
  • Компоненти описуються PHP-класами + Blade.
  • Взаємодії в браузері тригерять запити на сервер.
  • Сервер повертає оновлення стану/DOM.
  1. Коли використовувати
  • Admin-панелі та внутрішні інтерфейси.
  • Form-heavy бізнес-флоу.
  • Команди з сильним PHP-фокусом.
  1. Переваги
  • Висока швидкість розробки.
  • Тісна інтеграція з auth/validation/policies Laravel.

Livewire доречний, коли потрібен reactive UI без складної SPA-архітектури.

142. Порівняйте Livewire, Inertia і традиційний SPA-підхід.

Laravel

Ці підходи відрізняються місцем, де живе основна UI-логіка та стан.

  1. Livewire
  • Server-driven компоненти (PHP + Blade).
  • Мінімум JS.
  1. Inertia
  • Client-rendered сторінки (Vue/React/Svelte), але routing/data flow контролює Laravel.
  1. Традиційний SPA
  • Окремий frontend-застосунок + окремий REST/GraphQL API backend.
  • Максимальна frontend-автономія, але вища загальна складність.
  1. Практичний вибір
  • Livewire: швидкий Laravel-centric development.
  • Inertia: SPA-like UX без повного розділення backend/frontend.
  • SPA: коли потрібна повна декуплінг-архітектура.
143. Що таке TALL stack?

Laravel

TALL stack = Tailwind CSS + Alpine.js + Laravel + Livewire.

  1. Склад
  • Laravel — backend.
  • Livewire — реактивні server-driven компоненти.
  • Alpine.js — легка frontend-інтерактивність.
  • Tailwind CSS — utility-first стилізація.
  1. Чому популярний
  • Швидка full-stack розробка без важкого SPA-стеку.
  • Добре підходить для CRUD/admin/business застосунків.
  1. Сильні сторони
  • Висока швидкість ітерацій.
  • Laravel-first workflow.
  • Нижча frontend-складність у багатьох практичних кейсах.

TALL — продуктивний стек для команд, які хочуть швидко будувати Laravel-продукти.

144. Що таке SSR (Server-Side Rendering) і чи підтримує його Laravel?

Laravel

SSR означає рендер HTML на сервері до того, як сторінка потрапить у браузер.

  1. Дає кращий first paint і SEO для контентних сторінок.
  2. У Laravel SSR є нативно через Blade.
  3. Також можливий SSR у hybrid-стеках з JS-фреймворками.

Laravel підтримує SSR-патерни як у класичному, так і в гібридному форматі.

145. Як Laravel інтегрується з React і Vue?

Laravel

Laravel інтегрується з React/Vue через Vite і кілька архітектурних стилів.

  1. Blade + вбудовані компоненти React/Vue.
  2. Inertia.js як SPA-like підхід.
  3. Повністю decoupled SPA, що споживає Laravel API.

Гнучкість інтеграції дозволяє обрати формат під команду й продукт.

146. Що таке Ziggy у Laravel?

Laravel

Ziggy — пакет, що переносить named routes Laravel у JavaScript.

  1. Прибирає hardcoded URL на фронтенді.
  2. Дозволяє генерувати маршрути через JS route(...).
  3. Полегшує рефакторинг route-ів без розсинхрону frontend/backend.

Ziggy покращує узгодженість URL-контракту між сервером і клієнтом.

147. Що таке Laravel Sail?

Laravel

Laravel Sail — офіційне Docker-оточення для локальної розробки Laravel.

  1. Готовий стек сервісів (PHP, БД, Redis тощо).
  2. Швидкий онбординг.
  3. Однакове середовище для всієї команди.

Sail спрощує стабільну локальну розробку без ручного налаштування інфраструктури.

148. Що таке Laravel Forge?

Laravel

Laravel Forge — сервіс для provisioning і deployment PHP/Laravel серверів.

  1. Автоматизує налаштування серверів.
  2. Спрощує SSL, процеси, deploy scripts.
  3. Зменшує DevOps-навантаження для команд.

Forge допомагає швидко вести Laravel у production.

149. Що таке Laravel Vapor?

Laravel

Laravel Vapor — serverless платформа для Laravel на AWS.

  1. Орієнтація на managed serverless інфраструктуру.
  2. Автомасштабування та зменшення server-ops.
  3. Підходить для проєктів із змінним навантаженням.

Vapor — Laravel-first шлях до serverless deployment.

150. Що таке Laravel Envoyer?

Laravel

Laravel Envoyer — інструмент для zero-downtime deployment.

  1. Release-based деплой без зупинки застосунку.
  2. Безпечне перемикання релізів.
  3. Зручні rollback-сценарії.

Envoyer фокусується на стабільних безперервних деплоях.

151. Що таке Laravel Pennant?

Laravel

Laravel Pennant — first-party feature flag система.

  1. Керує включенням/виключенням фіч за правилами.
  2. Дає gradual rollout.
  3. Дозволяє швидко відкотити проблемну фічу без повного rollback релізу.

Pennant знижує ризик релізів і покращує контроль впровадження змін.

152. Що таке Laravel Pulse?

Laravel

Laravel Pulse — first-party інструмент realtime-інсайтів по стану застосунку.

  1. Показує важливі сигнали продуктивності й навантаження.
  2. Допомагає швидше діагностувати проблеми.
  3. Добре доповнює стандартні логи й метрики.

Pulse дає практичну observability-картину в екосистемі Laravel.

153. Що таке Laravel Telescope?

Laravel

Laravel Telescope — інструмент дебагу та introspection для локального/стейдж середовища.

  1. Відстежує запити, exceptions, jobs, mail, queries тощо.
  2. Прискорює аналіз поведінки застосунку.
  3. Зазвичай обмежується для production через чутливість даних.

Telescope — один із найкорисніших інструментів для debugging у Laravel.

154. Що таке Laravel Scout?

Laravel

Laravel Scout — абстракція full-text пошуку для Eloquent моделей через зовнішні search engines.

  1. Індексує модельні дані у пошуковий backend.
  2. Надає простий API для пошуку.
  3. Дає релевантніший пошук, ніж звичайний SQL LIKE.

Scout — зручний шар для production-grade search у Laravel.

155. Які пошукові движки підтримує Laravel Scout?

Laravel

Найпоширеніші backends для Scout:

  1. Algolia
  2. Meilisearch
  3. Typesense

Також можливі community/custom драйвери (залежно від архітектурних вимог).

156. Що таке Laravel Cashier?

Laravel

Laravel Cashier — пакет для підписок і recurring billing.

  1. Керує планами, підписками, trial, інвойсами.
  2. Прибирає великий обсяг кастомного платіжного boilerplate.
  3. Особливо корисний для SaaS-моделей.

Cashier прискорює впровадження subscription-білінгу в Laravel.

157. Що таке Laravel Socialite?

Laravel

Laravel Socialite — пакет для OAuth-логіну через зовнішніх провайдерів.

  1. Стандартизує login-flow для “Login with ...”.
  2. Полегшує інтеграцію з Google/GitHub/Facebook та іншими.
  3. Дає єдиний API поверх різних OAuth-провайдерів.

Socialite спрощує third-party auth у Laravel.

158. Що таке Laravel Pint?

Laravel

Laravel Pint — opinionated code style fixer на базі PHP-CS-Fixer.

  1. Автоматично приводить код до єдиного стилю.
  2. Зменшує шум у diff і code review.
  3. Зручно запускати локально й у CI.

Pint підвищує консистентність коду в команді.

159. Що таке Laravel Folio?

Laravel

Laravel Folio — file-based routing підхід для page-oriented Laravel застосунків.

  1. Маршрути будуються за файловими конвенціями.
  2. Менше route-boilerplate для контентних сторінок.
  3. Швидше масштабування структури простих page-flow.

Folio — альтернатива класичному route-дизайну для певних типів застосунків.

160. Що таке Laravel Precognition?

Laravel

Laravel Precognition дозволяє робити попередню backend-валідацію форми до фінального submit.

  1. Дає швидкий validation feedback під час введення.
  2. Використовує ті самі server-side правила як source of truth.
  3. Покращує UX складних форм.

Precognition прибирає дублювання валідації між frontend і backend.

161. Що таке PHP generators і коли їх варто використовувати?

PHP

Generators (yield) повертають значення ліниво, по одному, без побудови великої структури в пам’яті.

  1. Знижують memory usage на великих наборах.
  2. Добрі для потокової обробки файлів/даних.
  3. Підходять для послідовних pipeline-алгоритмів.

Generators — ключ до memory-efficient ітерації в PHP.

162. Що таке PHP attributes?

PHP

Attributes (#[...]) — нативні метадані в PHP.

  1. Прив’язуються до класів/методів/властивостей/параметрів.
  2. Замінюють частину docblock-анотацій.
  3. Полегшують інтеграцію з tooling і framework-логікою.

Attributes роблять метадані структурованими та машиночитними.

163. Поясніть strict types у PHP.

PHP

declare(strict_types=1); вмикає сувору перевірку scalar-типів у файлі.

  1. Без strict types PHP може робити неявні перетворення.
  2. З strict types невідповідність типу дає TypeError.
  3. Це підвищує передбачуваність і безпеку рефакторингу.

Strict types — важливий елемент сучасного production PHP-стилю.

164. Поясніть require, include, require_once, include_once.

PHP

Ці конструкції підключають PHP-файли з різною поведінкою при помилках і повторних включеннях.

  1. require — фатальна помилка, якщо файл недоступний.
  2. include — warning, виконання може продовжитись.
  3. _once-варіанти підключають файл лише один раз.

У сучасних Laravel/PHP-проєктах основним механізмом лишається Composer autoload.

165. Що таке WeakMap і яку проблему він вирішує?

PHP

WeakMap зберігає дані, прив’язані до об’єктів, не заважаючи збирачу сміття видаляти ці об’єкти.

  1. Ключами можуть бути лише об’єкти.
  2. Коли об’єкт-ключ знищується, відповідний запис зникає автоматично.
  3. Це зручно для тимчасових метаданих і кешів без memory leaks.

WeakMap корисний, коли потрібно пов’язати “додатковий стан” з об’єктом без ризику утримувати його в пам’яті зайво довго.

166. Що таке spread/splat оператор у PHP?

PHP

Оператор ... у PHP використовується для розпакування значень і variadic-аргументів.

  1. Розпакування аргументів
$args = [2, 3];
$result = sum(...$args);
  1. Розпакування масивів
$a = [1, 2];
$b = [...$a, 3, 4];
  1. Variadic-параметри
function logAll(string ...$messages): void {}

... робить код коротшим і зручнішим для композиції аргументів/даних.

167. Що таке enums у PHP 8.1+?

PHP

Enums — нативний тип для фіксованої множини дозволених значень/станів.

  1. Є unit enums і backed enums.
  2. Прибирають “магічні рядки”.
  3. Покращують type safety і читабельність домену.

Enums — дефолтний сучасний спосіб опису finite-state в PHP.

168. Що таке readonly properties у PHP?

PHP

Readonly-властивість можна встановити один раз (частіше в конструкторі), після чого змінювати не можна.

  1. Менше випадкових мутацій.
  2. Краща модель immutable DTO/value objects.
  3. Чіткіші контракти стану об’єкта.

Readonly properties підвищують надійність об’єктного дизайну.

169. Що таке readonly classes у PHP 8.2+?

PHP

readonly class робить усі instance-властивості класу readonly.

  1. Імм’ютабельність задається на рівні всього класу.
  2. Менше шаблонного коду.
  3. Добре підходить для value objects/DTO.

Readonly classes спрощують дисципліну незмінності даних.

170. Що таке intersection types і union types?

PHP

Union і intersection типи дозволяють точніше описувати контракти.

  1. A|B (union): значення може бути одного з типів.
  2. A&B (intersection): значення має відповідати всім типам одночасно.

Вони підвищують виразність API та якість static analysis.

171. Що таке anonymous classes?

PHP

Anonymous class — клас без імені, що створюється inline.

  1. Корисний для одноразових імплементацій.
  2. Зручний у тестах як локальний double.
  3. Для багаторазової логіки краще named class.

Anonymous classes — інструмент локальної лаконічності в коді.

172. Що таке first-class callables у PHP?

PHP

First-class callables дають короткий синтаксис отримання callable через ....

  1. Краща читабельність callback-коду.
  2. Краще для рефакторингу, ніж string-callables.
  3. Зручно в map/filter/pipeline сценаріях.

Це сучасний безпечний спосіб роботи з callback-ами.

173. Що таке fibers у PHP?

PHP

Fibers — low-level примітив кооперативної конкурентності в PHP 8.1+.

  1. Дають можливість suspend/resume виконання.
  2. Це не потоки й не паралелізм “сам по собі”.
  3. Використовуються асинхронними рантаймами/бібліотеками.

Fibers — фундамент для advanced async-моделей у PHP.

174. Що таке backed enums?

PHP

Backed enums — enums, чиї case-и мають scalar-значення (string або int).

  1. Зручні для збереження в БД і серіалізації в API.
  2. Дають типобезпеку + стабільний формат значення.
  3. Підтримують from() і tryFrom().

Backed enums — практичний стандарт для доменних статусів із persistence.

175. У чому різниця між interfaces, abstract classes і traits?

PHP

  1. Interface — контракт без реалізації.
  2. Abstract class — часткова реалізація + спільний стан.
  3. Trait — горизонтальний реюз методів між класами.

Вибір залежить від задачі: контракт, базова поведінка або локальний реюз.

176. Що таке SOLID і як ці принципи застосовуються в Laravel?

Laravel

SOLID — набір OOP-принципів для гнучкої та підтримуваної архітектури.

  1. Thin controllers, SRP.
  2. Розширення через інтерфейси/події (OCP).
  3. Сумісні реалізації контрактів (LSP).
  4. Малі цільові інтерфейси (ISP).
  5. Залежність від абстракцій через container/DI (DIP).

У Laravel SOLID реалізується через contracts, service container і модульний дизайн.

177. Які design patterns найчастіше використовують у Laravel-застосунках?

Laravel

Поширені патерни:

  1. Repository
  2. Factory
  3. Strategy
  4. Observer
  5. Command (jobs/commands)
  6. Adapter/Decorator (залежно від інтеграцій)

Патерни мають зменшувати складність, а не додавати зайву абстракцію.

178. Поясніть Repository, Factory, Strategy, Observer.

PHP

  1. Repository — абстрагує доступ до даних.
  2. Factory — централізує створення об’єктів.
  3. Strategy — взаємозамінні алгоритми за спільним інтерфейсом.
  4. Observer — реакції на події (у Laravel: events/listeners, model observers).

Ці патерни допомагають розділяти відповідальності й зменшувати зв’язаність.

179. Що таке PSR і які стандарти PSR найважливіші для Laravel-розробника?

PHP

PSR (PHP Standards Recommendations) — стандарти інтероперабельності від PHP-FIG.

Найважливіші для Laravel:

  1. PSR-1 / PSR-12 — coding style.
  2. PSR-3 — logger interface.
  3. PSR-4 — autoloading.
  4. PSR-7 — HTTP message interfaces (інтеграційні сценарії).
  5. PSR-11 — container interface концепції.

PSR-знання підвищує сумісність і якість архітектури в PHP-екосистемі.

180. Що таке Composer autoloading і як працює PSR-4?

PHP

Composer autoloading автоматично підвантажує класи без ручних require/include, а PSR-4 визначає стандарт відповідності namespace до файлової структури.

  1. Composer autoload
  • Генерує автозавантажувач із конфігурації проєкту/пакетів.
  • Підвантажує класи на вимогу.
  1. PSR-4 принцип
  • Namespace-префікс мапиться на базову директорію.
  • Частини namespace відповідають піддиректоріям.
  • Ім’я класу відповідає імені файла.
  1. Приклад
  • App\\ -> app/
  • App\\Services\\BillingService -> app/Services/BillingService.php

Composer + PSR-4 — фундамент сучасної організації коду в PHP/Laravel-проєктах.