olegv / brick
Простая библиотека для создания ui-компонентов на PHP с типизацией и композицией
Installs: 11
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/olegv/brick
Requires
- php: >=8.2
- ext-mbstring: *
- psr/simple-cache: ^3.0
Requires (Dev)
- phpstan/phpstan: ^2.1.33
- phpstan/phpstan-strict-rules: ^2.0
- phpunit/phpunit: ^11.5
This package is auto-updated.
Last update: 2025-12-30 21:43:37 UTC
README
Brick — это следующий шаг в эволюции UI-разработки на PHP. Для сложных, долгоживущих проектов, где важны строгие контракты и предсказуемость, обычные шаблонизаторы (Twig, Blade) оставляют нерешёнными фундаментальные проблемы: IDE не знает, какие переменные доступны в шаблоне; ошибки типов обнаруживаются только в рантайме; тестирование вёрстки требует хрупких E2E-тестов; кэширование превращается в рутину.
Система Brick превращает создание интерфейсов из хаотичного процесса в строго типизированную, предсказуемую среду. Представьте компоненты как математические функции: одинаковые входные данные всегда дают одинаковый HTML-вывод — никаких скрытых состояний, никаких побочных эффектов.
Автономность компонентов: Библиотеки компонентов Brick — это самодостаточная UI-единица, которую можно переносить из проекта в проект. Создавайте собственные компоненты как Composer-пакеты и используйте их в разных приложениях без переписывания.
Как это работает? Каждый компонент Brick — это иммутабельный readonly PHP-класс с промоутед-свойствами. Это явный контракт: IDE точно знает структуру данных, PHPStan проверяет типы до запуска, автодополнение работает из коробки. Класс автоматически связывается со своим HTML-шаблоном, CSS-стилями и JavaScript-кодом — вы описываете что должно отобразиться, а Brick заботится о как.
Что это даёт на практике:
- Чёткие контракты вместо "угадай, какие переменные нужны шаблону"
- Статический анализ UI вместо runtime-ошибок
- Юнит-тесты вёрстки вместо хрупких E2E
- Автоматическое кэширование с PSR-16 вместо ручного управления
- Типизированная композиция вместо наследования с побочными эффектами
- Безопасность по умолчанию — автоматическое экранирование, защита от XSS
Идеология проекта: UI-компоненты должны быть простыми как кирпичи (Brick), но из них можно строить сложные интерфейсы. Не шаблоны с вкраплениями PHP, а чистый код с декларативным описанием. Не монолитные виджеты, а композиция маленьких, независимых компонентов. Не ручное управление ассетами, а автоматическое обнаружение и оптимизация через BrickManager.
Ключевые особенности
- Иммутабельные компоненты (
Brick):readonlyклассы, которые не меняются после создания. Одинаковые входные данные = одинаковый HTML-вывод. - Автоматическое обнаружение файлов: Brick сам находит
template.php,style.css,script.jsв папке компонента. - Полное разделение логики и представления: PHP-класс, HTML-шаблон, CSS и JS хранятся отдельно, но связаны автоматически.
- Централизованное управление (
BrickManager): Кэширование метаданных компонентов, рендеринг CSS/JS ассетов, сбор статистики. - Модульность через трейты: Легко добавляйте кэширование (
WithCache), хелперы (WithHelpers), строгие проверки типов (WithStrictHelpers) или наследование (WithInheritance). - Гибкие стратегии ассетов: Встраивайте CSS/JS прямо в страницу (
InlineAssetRenderer) или генерируйте отдельные файлы (FileAssetRenderer). - Безопасность по умолчанию: Автоматическое экранирование HTML, защита от XSS в атрибутах.
- Строгая типобезопасность: PHP 8.2+,
strict_types=1, полная поддержка статического анализа (PHPStan MAX).
Документация
| Раздел | Описание |
|---|---|
| Начало работы | Установка и создание первого компонента |
| Компоненты | Brick, Clay, жизненный цикл, шаблоны |
| Трейты | WithCache, WithHelpers, WithStrictHelpers, WithInheritance |
| Ассеты | CSS/JS, AssetRenderer, создание своих рендереров |
| Продвинутые сценарии | Оптимизация, интеграция, тестирование, безопасность |
Быстрый старт
Установка
composer require olegv/brick
Минимальный пример
// HelloWorld/HelloWorld.php readonly class HelloWorld extends \OlegV\Brick { public function __construct(public string $name) { parent::__construct(); } }
<!-- HelloWorld/template.php --> <h1>Hello, <?= $this->e($this->name) ?>!</h1>
<?php // Использование require_once 'vendor/autoload.php'; echo new HelloWorld('World'); echo \OlegV\BrickManager::getInstance()->renderAssets();
Brick — это современный подход к созданию UI на PHP: предсказуемые, типизированные, иммутабельные компоненты с полной поддержкой статического анализа. Начните создавать интерфейсы как код уже сегодня!