Lift v1.3.0

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

Результаты воспроизводимы — см. сравнение бенчмарков.

Путь обучения

Если вы новичок, читайте документацию в таком порядке — каждый раздел опирается на предыдущий:

  1. Установка — получите рабочий composer.json.
  2. Быстрый старт — Hello World → REST API → контроллеры.
  3. Маршрутизация — методы, параметры, группы, именованные маршруты, маршрутизация через атрибуты.
  4. Request / Response — чтение входных данных, формирование ответа.
  5. DI-контейнер — автосвязывание, привязки, синглтоны.
  6. Middleware — аутентификация, логирование, CORS.
  7. Валидация — 40+ правил, форматирование ошибок.
  8. База данных — построитель запросов, миграции, модели.

Всё остальное дополнительно — читайте то, что нужно.

Принципы проектирования

  1. PSR на всех уровнях. PSR-3, PSR-7, PSR-11, PSR-14, PSR-15, PSR-16. Всё, что вы пишете под интерфейсы Lift, работает с любым другим PSR-совместимым пакетом.
  2. Никаких глобалей, никакой магии со статикой. Каждый сервис разрешается через контейнер; каждый Request/Response — это объект, который можно передавать в тестах.
  3. Падать громко. Неправильное использование выбрасывает ContainerException / HttpException с точным сообщением — никаких тихих откатов.
  4. Ноль рантайм-зависимостей за пределами PSR-интерфейсов. Меньше кода — меньше поверхность атаки, меньше что ломать при composer update, меньше что аудировать.
  5. Исходники, понятные новичку. ~10 000 строк, никакой косвенности через __call/__get, никаких фасадов. Можно git clone Lift и прочитать его целиком за выходные.

Лицензия

MIT. Создан и поддерживается сообществом.

Начать →