olegv/brick

Инструмент для создания строго типизированных UI-компонентов на PHP

Installs: 76

Dependents: 1

Suggesters: 0

Security: 0

Stars: 0

Watchers: 0

Forks: 0

Open Issues: 0

pkg:composer/olegv/brick

dev-master 2026-01-08 12:59 UTC

This package is auto-updated.

Last update: 2026-02-08 14:34:10 UTC


README

PHP PHPUnit PHPStan PSR-12

Tests Analise

License Immutable Components Server-side No Dependencies

Внимание! Эта библиотека является экспериментальной и предназначена для исследовательских целей.

Brick — инструмент для создания строго типизированных UI-компонентов на PHP. Каждый компонент — это иммутабельный readonly PHP-класс, который автоматически связывается со своим HTML-шаблоном, CSS-стилями и JavaScript-кодом.

Ключевые особенности

  • Иммутабельные компоненты (Brick): readonly классы, которые не меняются после создания.
  • Автоматическое обнаружение файлов: Brick сам находит template.php, style.css, script.js в папке компонента.
  • Централизованное управление (BrickManager): Кэширование метаданных компонентов, рендеринг CSS/JS.
  • Модульность через трейты: Добавляйте кэширование (WithCache), хелперы (WithHelpers) и другие возможности.
  • Безопасность по умолчанию: Автоматическое экранирование HTML, защита от XSS.

Рекомендации по использованию

  • Делайте композицию компонентов только через echo или приведение к строке
  • Оставьте конструктор пустым
  • Подготовку данных выполняйте в prepare() - он автоматически срабатывает перед подключением шаблона
  • Используйте простые типы данныхstring, int, float, bool, array и null

Быстрый старт

Установка

composer require olegv/brick

Минимальный пример

<?php
// HelloWorld/HelloWorld.php
declare(strict_types=1);
namespace PSR4Path\HelloWorld;

readonly class HelloWorld extends \OlegV\Brick
{
    public function __construct(public string $name) {
    }
}
<?php
//HelloWorld/template.php
declare(strict_types=1);
use PSR4Path\HelloWorld\HelloWorld;
/** @var HelloWorld $this */
?>
<!-- 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();