Согласись, что неприятен JS-налог: дублирование роутинга, валидации и моделей на фронте, возня с Vite и раздутые бандлы. Hotwire переворачивает схему — сервер шлёт готовые куски HTML, Turbo подменяет DOM, страница не перезагружается. 🚀
Стек первой части туториала:
— фреймворк Symfony 7.4 + AssetMapper (без Webpack и Node);
— компоненты Turbo Drive/Frames/Streams для бесшовных обновлений;
— библиотека Stimulus там, где реально нужен JS (drag & drop);
— протокол Mercure через SSE вместо возни с WebSockets на PHP;
— стили Tailwind через symfonycasts-бандл (снова без npm);
Крутой приём → колонки доски генерятся из PHP Enum:
enum TaskStatus: string
{
case TODO = 'todo';
case IN_PROGRESS = 'in_progress';
case DONE = 'done';
}
#[ORM\Column(length: 50, enumType: TaskStatus::class)]
private TaskStatus $status = TaskStatus::TODO;
Достаточно передать TaskStatus::cases() в Twig и новый статус добавится одной строкой в Enum. Никакой правки шаблонов и магических строк (Doctrine сам сериализует значения в varchar).
Во второй части туториала будет немного нативного HTML5 DnD и Turbo Streams через Mercure для синхронизации между вкладками.
🔗 Подробнее
Библиотека пхпшника