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. Создан и поддерживается сообществом.