Что такое Winter
Winter — современный, быстрый и элегантный PHP-фреймворк для API и веб-приложений. Маршруты, привязка параметров, валидация и ORM описываются атрибутами прямо в коде — без конфиг-файлов и «магии». Архитектура предсказуема, каждый слой заменяем.
Для кого это
- Архитекторам и тимлидам — оценить фреймворк для команды: посмотрите Философию и Экосистему.
- Разработчикам — начать писать код: Установка и Быстрый старт проведут за руку до первого маршрута.
- Тем, кто уже в деле — Ключевые понятия собирают всю ментальную модель на одной странице.
Три принципа
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, а маршрут — атрибут на методе.
Больше ничего регистрировать не нужно:
<?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 /. Полный сквозной пример — в
Быстром старте.
Что дальше
Создайте проект и поднимите сервер:
composer create-project flytachi/winter my-app
cd my-app
php call run devГотово — сервер поднимется на http://0.0.0.0:8000. Дальше:
- Установка — требования и первый запуск подробно
- Быстрый старт — первый маршрут за 5 минут
- Ключевые понятия — как всё устроено
Ссылки
- Стартовый репозиторий: github.com/flytachi/winter
- Ядро: github.com/flytachi/winter-kernel
- Сайт: winterframe.net