phpsoftbox / requisites
Requisites component for the PhpSoftBox framework
Requires
- php: ^8.5
- phpsoftbox/data-casting: dev-master
- phpsoftbox/database: dev-master
- phpsoftbox/filter: dev-master
- phpsoftbox/forms: dev-master
- phpsoftbox/orm: dev-master
- phpsoftbox/validator: dev-master
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.93
- phpsoftbox/cli-app: dev-master
- phpsoftbox/cs-fixer: ^1.1.0
- phpunit/phpunit: ^11.2
Suggests
None
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-08-28 08:10:34 UTC
README
phpsoftbox/requisites хранит изменяемые наборы реквизитов в JSON, но оставляет их типизированными на уровне приложения: для каждого набора известны форма, правила валидации, вариант схемы и версия структуры.
Компонент подходит не только для реквизитов компании. Его можно использовать для паспортных данных, заявлений, договоров и других наборов полей, состав которых зависит от страны, типа владельца или бизнес-сценария.
Минимальная версия PHP — 8.5.
С чего начать
Документация рассчитана на последовательное чтение:
- 01 — Первое подключение — основные понятия, таблица, форма, validator, профиль и полный цикл сохранения.
- 02 — Managed lifecycle — несколько профилей, selector policies, кастомный ORM storage, payload migrations и CLI backfill.
- 03 — Обновление существующего проекта — поведенческие изменения, пошаговый перенос и production checklist.
Если вы впервые видите компонент, начните с главы 01. Глава 02 намеренно не повторяет базовые понятия, а глава 03 рассчитана на читателя, который сначала познакомился с текущей архитектурой.
Какую проблему решает компонент
Представим, что у компании могут быть российские или казахстанские реквизиты. У этих вариантов разные поля и правила, а структура сохранённых данных со временем меняется.
Requisites добавляет поверх JSON:
- владельца данных —
subject; - назначение набора —
profile; - вариант схемы —
selector; - версию JSON —
schema version; - описание формы для клиента;
- server-side validation и фильтрацию;
- lazy migration и массовый backfill;
- маршрутизацию в общую таблицу или проектную ORM entity.
Стабильные доменные поля, которые участвуют в индексах и SQL-фильтрах, лучше хранить обычными колонками. Requisites предназначен для составных и изменяемых наборов данных.
Рекомендуемый API
Для нового кода используется managed lifecycle:
RequisitesProfileInterface
↓
ArrayRequisitesProfileRegistry
↓
ManagedRequisitesFactory
↓
DefaultRequisitesManager
Основной write-метод — validateAndSave(). Он:
- выбирает schema по profile и selector;
- выполняет form validation;
- не пишет данные при validation errors;
- сохраняет только
ValidationResult::filteredData(); - выставляет правильную schema version;
- безопасно обрабатывает конкурентное первое сохранение.
Низкоуровневые storage, schema, validation и migration classes остаются доступны для специализированной инфраструктуры и совместимости. При их прямом использовании orchestration и проверка payload становятся ответственностью приложения.
Payload migrations
PayloadMigrationEngineвыполняет последовательные переходыN → N+1.MigrationAwareStorageAdapterлениво обновляет востребованные записи при чтении и сохранении.BackfillMigrationRunnerмассово обновляет storage выбранного профиля.StaticTargetVersionResolverопределяет целевую версию поprofile + selector.
Команда для предварительной проверки:
php psb requisites:migrate --profile=company --dry-run
Пример целевого backfill:
php psb requisites:migrate \
--profile=company \
--selector=country:RU \
--from=1 \
--to=3 \
--batch-size=200
Перед запуском команды application container должен предоставлять BackfillMigrationRunner. Полная настройка описана в главе 02.
Готовые формы и правила
Для company profile доступны:
PhpSoftBox\Requisites\Country\RequisitesCountryCatalog;CompanyRequisitesRuFormValidation;CompanyRequisitesKzFormValidation;CompanyRequisitesByFormValidation;CompanyRequisitesAmFormValidation;CompanyRequisitesAzFormValidation;CompanyRequisitesGenericFormValidation.
Form validation classes находятся в PhpSoftBox\Requisites\Validation\Form\Company.
Страновые rules находятся в:
PhpSoftBox\Requisites\Validation\Rule\Ru;PhpSoftBox\Requisites\Validation\Rule\Kz;PhpSoftBox\Requisites\Validation\Rule\By;PhpSoftBox\Requisites\Validation\Rule\Am;PhpSoftBox\Requisites\Validation\Rule\Az.
Готовый класс следует подключать только после проверки, что его поля и ограничения совпадают с контрактом приложения.
Проверка компонента
Из корня монорепозитория:
make select-requisites make php-test make php-composer-cs-check