Search by

phpsoftbox / validator

inspector-who

Validator component for the PhpSoftBox framework

Package info

github.com/phpsoftbox/validator

pkg:composer/phpsoftbox/validator

Statistics

Installs: 362

Dependents: 10

Suggesters: 0

Stars: 0

Open Issues: 0

v1.0.1 2026-09-29 12:25 UTC

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

Для переиспользуемых валидаторов форм доступны:

  • FormValidationInterface
  • AbstractFormValidation

Они позволяют строить 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.

Документация

Режимы остановки

use PhpSoftBox\Validator\ValidationOptions;
use PhpSoftBox\Validator\ValidationStopMode;

$options = new ValidationOptions(stopMode: ValidationStopMode::FIRST_PER_FIELD);