phpsoftbox / validator
Validator component for the PhpSoftBox framework
Requires
- php: ^8.5
- ext-fileinfo: *
- phpsoftbox/collection: ^1.0
- phpsoftbox/filter: ^1.0
- psr/http-message: ^2.0
Requires (Dev)
- phpsoftbox/cs-fixer: ^1.2.2
- phpsoftbox/http-message: ^1.0
- phpsoftbox/session: ^1.0
- phpunit/phpunit: ^13.3
Suggests
- phpsoftbox/validator-db: Provides database-backed exists and unique validation rules.
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-09-29 12:25:57 UTC
README
Компонент для валидации данных через набор правил‑объектов.
Установка
composer require phpsoftbox/validator
Быстрый старт
<?php use PhpSoftBox\Validator\Validator; use PhpSoftBox\Validator\Rule\StringValidation; use PhpSoftBox\Validator\Rule\IntValidation; $validator = new Validator(); $result = $validator->validate( data: [ 'name' => 'Alex', 'age' => 17, ], rules: [ 'name' => [(new StringValidation())->min(2)->max(50)->required()], 'age' => [(new IntValidation())->min(18)], ], ); if ($result->hasErrors()) { $errors = $result->errorBag()->all(); }
Form Validation Base
Для переиспользуемых валидаторов форм доступны:
FormValidationInterfaceAbstractFormValidation
Они позволяют строить form-like валидаторы поверх Validator и использовать единые typed getters (getString, getInt, getBool, ...).
Typed getters читают filteredData() — только проверенные поля (см. docs/01-usage.md).
AbstractFormValidation::applyPayloadFilters() (Support\FilterPayloadApplier) применяет фильтры
к payload до валидации по dot‑путям и wildcard. Для непереданного поля (точный путь) фильтры вызываются с null:
если результат — умолчание (DefaultFilter('all'), IntegerFilter(1), BooleanFilter(false)), поле появляется в
payload; если null или '' (например, TrimFilter от null) либо фильтр бросил исключение — поле остаётся
непереданным, и необязательные правила видят «не передано», а не пустое значение. Wildcard-пути (items.*.qty)
фильтруют только существующие элементы.
public function filters(): array { return [ 'status' => [new DefaultFilter('all')], // нет в запросе → 'all' 'page' => [new IntegerFilter(1)], // нет в запросе → 1 'comment' => [new TrimFilter()], // нет в запросе → поля нет ]; }
Фильтр — Closure или invokable-объект (FilterInterface), либо список таких фильтров; строки-функции и
[$object, 'method'] отклоняются с LogicException.
Документация
- docs/01-usage.md — базовое использование и результат валидации
- docs/02-data-paths.md — dot‑пути и wildcard
- docs/03-messages.md — сообщения, плейсхолдеры, attributes
- docs/04-required.md — required/nullable и required‑сценарии
phpsoftbox/filter— отдельный компонент фильтров для подготовки данных- docs/06-specification-executor-migration.md — breaking-переход на архитектуру Specification + Executor
- docs/validators/01-string-validation.md — StringValidation
- docs/validators/02-int-validation.md — IntValidation
- docs/validators/03-float-validation.md — FloatValidation
- docs/validators/04-bool-validation.md — BoolValidation
- docs/validators/05-array-validation.md — ArrayValidation
- docs/validators/06-present-validation.md — PresentValidation
- docs/validators/07-filled-validation.md — FilledValidation
- docs/validators/08-missing-validation.md — MissingValidation
- docs/validators/09-exclude-validation.md — ExcludeValidation
- docs/validators/10-prohibited-validation.md — ProhibitedValidation
- docs/validators/11-prohibits-validation.md — ProhibitsValidation
- docs/validators/12-anyof-validation.md — AnyOfValidation
- docs/validators/13-bail-validation.md — BailValidation
- docs/validators/14-date-validation.md — DateValidation
- docs/validators/15-file-validation.md — FileValidation
phpsoftbox/validator-db— DB rules ExistsValidation и UniqueValidation- docs/validators/18-phone-validation.md — PhoneValidation
Режимы остановки
use PhpSoftBox\Validator\ValidationOptions; use PhpSoftBox\Validator\ValidationStopMode; $options = new ValidationOptions(stopMode: ValidationStopMode::FIRST_PER_FIELD);