tessera-php / tessera-core
Tessera core: interfaces, discovery service, exceptions, test cases
dev-main
2026-02-23 08:26 UTC
Requires
- php: 8.1 - 8.5
- composer-runtime-api: ^2.0
- psr/log: ^2.0|^3.0
Requires (Dev)
- phpunit/phpunit: ^10.0
Suggests
- phpunit/phpunit: ^10.0 - Required for using testing helpers (TypeTestCase, AdapterTestCase, RendererTestCase)
This package is auto-updated.
Last update: 2026-04-23 09:08:42 UTC
README
Ядро модульной системы типов Tessera для PHP 8.1+.
Установка
composer require tessera-php/tessera-core
Содержимое пакета
Интерфейсы
TypeInterface— описание типа данных (validate, normalize)StorageAdapterInterface— стратегия хранения (toPersistence, fromPersistence, getStorageSchema)RendererInterface— стратегия отображения (render)
Сервисы
DiscoveryService— автоматическое обнаружение компонентов из установленных пакетовComponentDescriptor— метаданные зарегистрированного компонента
Исключения
ValidationException— ошибка валидации в normalize()InvalidConfigException— класс не реализует требуемый интерфейсClassNotFoundException— класс не найден
Тест-кейсы
TypeTestCase— базовый класс для тестирования типовAdapterTestCase— базовый класс для тестирования адаптеровRendererTestCase— базовый класс для тестирования рендереров
Быстрый старт
use Tessera\Core\DiscoveryService; // Инициализация с кешем $discovery = new DiscoveryService('/var/cache/tessera.php'); // Получить все типы $types = $discovery->getTypes(); // ['tessera-contract-type/email' => 'Tessera\Type\Email\EmailType', ...] // Получить адаптеры для типа $adapters = $discovery->getAdapters('tessera-contract-type/email'); // ['mysql' => [ComponentDescriptor, ...]] // Получить рендереры для типа $renderers = $discovery->getRenderers('tessera-contract-type/email'); // ['form' => [ComponentDescriptor, ...]]
Разработка типов
use Tessera\Core\TypeInterface; use Tessera\Core\Exception\ValidationException; final class MyType implements TypeInterface { public function getName(): string { return 'my-type'; } public function validate(mixed $value): bool { // Лёгкая проверка без исключений return is_string($value) && strlen($value) <= 255; } public function normalize(mixed $value): MyData { // Полная валидация с исключением при ошибке if (!$this->validate($value)) { throw new ValidationException('Invalid value'); } return new MyData($value); } }
Тестирование
use Tessera\Core\Testing\TypeTestCase; final class MyTypeTest extends TypeTestCase { protected function createType(): MyType { return new MyType(); } public static function validValues(): array { return [['hello'], ['world']]; } public static function invalidValues(): array { return [[''], [null], [123]]; } }
Требования
- PHP 8.1+
- Composer 2.0+
Лицензия
MIT