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. Створений і підтримуваний спільнотою.

Почати →