Введение

Что такое Winter

Winter — современный, быстрый и элегантный PHP-фреймворк для API и веб-приложений. Маршруты, привязка параметров, валидация и ORM описываются атрибутами прямо в коде — без конфиг-файлов и «магии». Архитектура предсказуема, каждый слой заменяем.

Язык PHP 8.4+Рантаймы FPM · Swoole · CLIТип API и веб-приложения

Для кого это

Три принципа

Winter строится вокруг трёх идей. Кратко здесь, подробно — в Философии.

  • Явное лучше неявного. Поведение видно в коде: атрибут на методе — это и есть маршрут. Ничего не спрятано в скрытых конфигах.
  • CLI вместо обвязки. Компоненты создаёт генератор call make, а не копипаст.
  • Производительность по умолчанию. Кеш маршрутов и DI, один и тот же код под FPM, Swoole и CLI.

Совет

Знакомы с Laravel или Symfony? Освоитесь за вечер — понятия те же (контроллеры, DI, ORM, middleware), но подача через атрибуты и без лишнего веса.

Что умеет

Возможность Как это выглядит
Маршрутизация Атрибуты #[GetMapping], #[PostMapping] на методах, автодискавери
Привязка запроса #[RequestJson], #[RequestQuery], #[RequestForm], #[RequestFile], #[PathVariable]
Валидация #[Valid] + констрейнты (#[NotBlank], #[Size], #[Uuid]…)
ORM (PPA) Репозитории и сущности на атрибутах, конструктор запросов Qb::
DI-контейнер Автовайринг, #[Autowired], три жизненных цикла
CLI (call) Генераторы кода, свои команды, запуск сервера
Фоновые задачи Job::dispatch(), процессы, демоны, WebSocket

Как выглядит код

Контроллер — это класс со стереотипом Controller, а маршрут — атрибут на методе. Больше ничего регистрировать не нужно:

main/MainController.php
<?php

namespace Main;

use Flytachi\Winter\K2\Http\Response\ResponseEntity;
use Flytachi\Winter\K2\Route\Annotation\GetMapping;
use Flytachi\Winter\K2\Stereotype\Controller;

class MainController extends Controller
{
  #[GetMapping]
  public function index(): ResponseEntity
  {
      return ResponseEntity::ok('Hello, Winter');
  }
}

Это уже рабочий маршрут GET /. Полный сквозной пример — в Быстром старте.

Что дальше

Создайте проект и поднимите сервер:

bash
composer create-project flytachi/winter my-app
cd my-app
php call run dev

Готово — сервер поднимется на http://0.0.0.0:8000. Дальше:

Ссылки