Валидатор набора полей

Класс Evas\Validate\Fieldset позволяет создавать валидаторы наборов полей.

Конфигурация

Конструктор

Позволяет объединить установку валидаторов полей и свойств валидатора набора полей.

АргументТипОписание
1array|nullмаппинг валидаторов полей или параметров валидаторов полей по их именам
2array|nullпараметры валидатора набора полей

Сигнатура:

public function __construct(array $fields = null, array $props = null);

Пример:

$fieldset = new Fieldset([
    'email' => new EmailField,
    'password' => [
        'min' => 6, 'max' => 30,
        'same' => 'password_repeat', // password_repeat должен совпадать с password
        'sameLabel' => 'Password Repeat',
    ],
], [
    'name' => 'Регистрация',
    'valuesTypeError' => 'Данные набора полей <":name" > переданы в неверном формате.',
]);

field

Устанавливает валидатор поля

АргументТипОписание
1stringимя поля
2Field|arrayвалидатор поля или параметры валидатора поля
$fieldset->field('email', new EmailField);
$fieldset->field('password', ['min' => 6, 'max' => 30]);

Возвращает ссылку на себя

fields

Устанавливает валидаторы полей

АргументТипОписание
1arrayмаппинг валидаторов полей или параметров валидаторов полей по их именам
$fieldset->fields([
    'email' => new EmailField,
    'password' => ['min' => 6, 'max' => 30],
]);

Возвращает ссылку на себя

setProps

Устанавливает свойства набора полей

АргументТипОписание
1arrayмаппинг свойств набора полей
$fieldset->setProps([
    'name' => 'Авторизация',
    'valuesTypeError' => 'Данные набора полей <":name" > переданы в неверном формате.',
]);

Возвращает ссылку на себя

Свойства

ИмяТипОписание
$namestringимя набора полей (пригодится для вложенных наборов полей)
$valuesBeforearrayисходные значения до валидации в виде ассоциативного массива [имя поля => значение], будет перезаписано при запуске валидации
$valuesarrayотвалидированные значения в виде ассоциативного массива [имя поля => значение], будет перезаписано при запуске валидации

Свойства локальных шаблонов ошибок

ИмяТипОписание
$valuesTypeErrorstringшаблон ошибки несоответствия типа значений, переданных в набор полей

Валидация

isValid

Валидация данных

Итеративно проходит по всем валидаторам полей и рекурсивно по вложенным валидаторам набора полей, вызывая их метод isValid с передачей в него значения по имени поля/набора полей

АргументТипОписаниеПо умолчанию
1array|objectданные для валидации в виде маппинга значений
2bool|nullпроверять на все ошибкиfalse
3bool|nullвызывается ли из родительского набора полейfalse
$fieldset->isValid(['email' => 'test@test.com', 'password' => 'test']);

throwIfNotValid

Проверяет данные на валидность с выбросом исключения Evas\Validate\ValidateException в случае первой попавшейся ошибки (Проверка на все ошибки недоступна).

АргументТипОписание
1array|objectданные для валидации в виде маппинга значений
$fieldset->throwIfNotValid(['email' => 'test@test.com', 'password' => 'test']);

Получение ошибок валидации

Метод errors() позволяет получить объект ошибок валидации Evas\Validate\Errors

$data = ['email' => 'test@test.com', 'password' => 'test'];

$fieldset = new Fieldset([
    'email' => new EmailField,
    'password' => ['min' => 6, 'max' => 30],
]);
if (!$fieldset->isValid($data)) {
    die($fieldset->errors()->first()); // вывод первой попавшейся ошибки
}

Получение отвалидированных значений

В случае успеха валидации, отвалидированные значения будет доступны в переменной $values в виде ассоциативного массива с именами полей в качестве ключей.

$data = ['email' => 'test@test.com', 'password' => 'test123'];

$fieldset = (new Fieldset([
    'email' => new EmailField,
    'password' => ['min' => 6, 'max' => 30],
]))->throwIfNotValid($data);

echo 'Привет, ' . $fieldset->values['email'] . '. Добро пожаловать на наш сайт.';

Наследование

Вы можете создать свой класс валидатора набора полей отнаследовавшись от Evas\Validate\Fieldset.

Пример:

// LoginFieldset.php
class LoginFieldset extends \Evas\Validate\Fieldset
{
    /**
     * Предустановленные поля валидатора.
     * @return array|null
     */
    public function presetFields(): ?array
    {
        return [
            'login' => new \Evas\Validate\Fields\LoginField,
            'password' => new PasswordField,
        ];
    }
}

presetFields

Задаёт предустановленные поля валидатора.

Исользуется в кастомных валидаторах набора полей.

/**
 * Предустановленные поля валидатора.
 * @return array|null
 */
public function presetFields(): ?array
{
    return [
        'login' => new \Evas\Validate\Fields\LoginField,
        'password' => new PasswordField,
    ];
}

presetProps

Задаёт предустановленные свойства валидатора.

Исользуется в кастомных валидаторах набора полей.

/**
 * Предустановленные свойства валидатора.
 * @return array|null
 */
public function presetProps(): ?array
{
    return [
        'name' => 'login_data',
        'fields' => [ 
            // так тоже можно задать предустановленные поля
            // вместо или вместе с presetFieldset
            'login' => new \Evas\Validate\Fields\LoginField,
            'password' => new PasswordField,
        ],
    ];
}