Lift
PHP-мікрофреймворк, що піднімає — достатньо компактний, щоб прочитати його за вечір, і достатньо повний, щоб запустити продакшен-API до ранку.
Lift — це сучасний мікрофреймворк на PHP 8.1+, який містить лише те, що справді потрібно реальному вебсервісу: маршрутизатор, DI-контейнер з автозв’язуванням, middleware за PSR-15, HTTP-шар, конструктор запитів і міграції, черги, JWT, шифрування та сервер JSON-RPC. Він не має рантайм-залежностей поза PSR-інтерфейсами, близько 10 000 рядків вихідного коду, і в бенчмарках він швидший за будь-який інший PHP-мікрофреймворк — окрім чистого PHP.
Якщо вам колись здавалося, що Laravel/Symfony — це забагато, а Slim/Flight — замало, то Lift — це той фреймворк, який вам справді потрібен.
Демо за п’ять секунд
<?php
require 'vendor/autoload.php';
use Lift\App;
use Lift\Http\Request;
use Lift\Http\Response;
$app = new App();
$app->get('/', fn() => Response::json(['message' => 'Hello, World!']));
$app->get('/users/{id}', fn(Request $req) => Response::json([
'id' => (int) $req->param('id'),
]));
$app->run();
Це завершений, готовий до запуску JSON-API. Жодних конфігураційних файлів, жодних сервіс-провайдерів, жодного графа залежностей, який треба оголошувати заздалегідь.
Навіщо потрібен Lift?
Сьогодні в PHP є три категорії фреймворків:
| Рівень | Приклади | Компроміс |
|---|---|---|
| Повностекові | Laravel, Symfony | Потужні, але важкі — 50+ МБ vendor, десятки «магічних» методів, нав’язана структура. Надмірні для API. |
| Мінімальні | Slim, Flight, Leaf | Легкі, але черги/JWT/шифрування/міграції/валідацію ви пишете самі. |
| Ті, що піднімають | Lift | Усе, що потрібно реальному сервісу, і нічого зайвого. |
Lift має власну думку щодо того, що включати (черги, JWT, шифрування, міграції, валідація, панель налагодження) і не нав’язує, як цим користуватися (немає сервіс-провайдерів, немає обов’язкової структури каталогів, немає фасадів, немає глобального стану).
Що в коробці
Повний перелік можливостей — кожен пункт нижче має власну сторінку документації:
| Модуль | Що він дає |
|---|---|
| Маршрутизація | Статичні O(1) + динамічні regex-маршрути, іменовані маршрути, групи, маршрутизація через атрибути |
| Контейнер | DI за PSR-11 з повним автозв’язуванням, синглтони, фабрики |
| Middleware | Конвеєр за PSR-15. Вбудовані CORS, rate-limit, CSRF, заголовки безпеки |
| Request / Response | HTTP-об’єкти за PSR-7 із зручними помічниками та правильно реалізованою незмінністю |
| Шаблони | Звичайні PHP-шаблони з макетами, секціями, частковими шаблонами |
| Сесії | Драйвери для файлів, бази даних, Redis, Memcached за єдиним інтерфейсом |
| Валідація | 40+ вбудованих правил, власні валідатори, авто-422 |
| База даних | Конструктор запитів, міграції, моделі, м’яке видалення, пагінація, кілька з’єднань |
| Черги | Драйвери Sync, Redis, AMQP, DB + воркер із коректним завершенням |
| JWT | Кодування/декодування HS256/RS256 з помічниками для claims і готовим middleware |
| Шифрування | AES-256-GCM, HMAC-SHA256, хешування паролів Argon2 |
| Кеш | Кеш за PSR-16 з бекендами array і Redis |
| Події | Диспетчер за PSR-14 |
| Логування | Логер за PSR-3 з обробниками для файлу, stdout, ротації, syslog |
| JSON-RPC 2.0 | Сервер, що відповідає специфікації, прив’язуваний до будь-якого маршруту |
| Консоль | CLI-раннер, генератори (make:controller, …), воркер черг |
| HTTP-клієнт | Обгортка над curl із повторними спробами |
| Панель налагодження | Вбудований у сторінку інспектор запитів/SQL/таймінгів для розробки |
| Тестування | TestCase + TestResponse із плавними твердженнями |
| OpenAPI | Генерація специфікації OpenAPI 3.0 з атрибутів #[Route] + #[Param] |
Продуктивність
Пропускна здатність HTTP у Lift на тому самому хості, тій самій збірці PHP, тому самому обробнику:
| Фреймворк | /ping (запит./с) |
/json (запит./с) |
/users/{id} (запит./с) |
|---|---|---|---|
| чистий PHP | 4 838 | 4 362 | 4 426 |
| Lift | 2 913 | 2 553 | 2 323 |
| Flight | 2 521 | 1 720 | 1 660 |
| Leaf | 2 379 | 1 826 | 1 776 |
| Slim 4 | 1 718 | 1 427 | 1 429 |
| Lumen | 1 210 | 926 | 777 |
Результати відтворювані — див. порівняння бенчмарків.
Шлях навчання
Якщо ви новачок, читайте документацію в такому порядку — кожен розділ спирається на попередній:
- Встановлення — отримайте робочий
composer.json. - Швидкий старт — Hello World → REST API → контролери.
- Маршрутизація — методи, параметри, групи, іменовані маршрути, маршрутизація через атрибути.
- Request / Response — читання вхідних даних, формування відповіді.
- DI-контейнер — автозв’язування, прив’язки, синглтони.
- Middleware — автентифікація, логування, CORS.
- Валідація — 40+ правил, форматування помилок.
- База даних — конструктор запитів, міграції, моделі.
Усе інше додаткове — читайте те, що потрібно.
Принципи проєктування
- PSR на всіх рівнях. PSR-3, PSR-7, PSR-11, PSR-14, PSR-15, PSR-16. Усе, що ви пишете під інтерфейси Lift, працює з будь-яким іншим PSR-сумісним пакетом.
- Жодних глобалей, жодної магії зі статикою. Кожен сервіс розв’язується через контейнер; кожен Request/Response — це об’єкт, який можна передавати в тестах.
- Падати гучно. Неправильне використання викидає
ContainerException/HttpExceptionіз точним повідомленням — жодних тихих відкатів. - Нуль рантайм-залежностей поза PSR-інтерфейсами. Менше коду — менша поверхня атаки, менше що ламати під час
composer update, менше що аудитувати. - Вихідний код, зрозумілий новачку. ~10 000 рядків, жодної непрямості через
__call/__get, жодних фасадів. Можнаgit cloneLift і прочитати його повністю за вихідні.
Ліцензія
MIT. Створений і підтримуваний спільнотою.