Валидация данных в PHP с библиотекой Respect\Validation

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Что такое Respect\Validation?

Respect\Validation — это мощная и выразительная библиотека для валидации данных на PHP. Она позволяет строить сложные правила проверки с помощью цепочек методов, что делает код чистым и читаемым. Библиотека поддерживает более 60 встроенных правил (от проверки email до валидации CPF/CNPJ) и легко расширяется пользовательскими правилами.

Зачем нужна валидация?

Валидация данных — критический этап обработки пользовательского ввода, API-запросов или данных из внешних источников. Без неё приложение уязвимо для:

  • SQL-инъекций и XSS-атак
  • Некорректных данных, вызывающих ошибки
  • Нарушения бизнес-логики

Respect\Validation решает эти проблемы, предоставляя единый интерфейс для фильтрации и проверки.

Установка

Установите библиотеку через Composer:

composer require respect/validation

После установки подключите автозагрузчик и используйте пространство имён:

require 'vendor/autoload.php';
use Respect\Validation\Validator as v;

Основные функции

Библиотека предлагает:

  • Цепочки правил: v::alnum()->noWhitespace()->length(5, 20)->validate($input)
  • Кастомные сообщения об ошибках: v::email()->setName('Email')->assert($input)
  • Групповую валидацию: v::attribute('name', v::stringType())->attribute('age', v::intVal())
  • Необязательные поля и условные правила (например, проверка только если поле присутствует).

Пример кода на PHP

Простая валидация формы регистрации:

<?php
require 'vendor/autoload.php';
use Respect\Validation\Validator as v;

$data = [
    'username' => 'john_doe',
    'email' => 'john@example.com',
    'password' => 'secret123',
    'age' => 25
];

$usernameValidator = v::alnum()->noWhitespace()->length(4, 20);
$emailValidator = v::email();
$passwordValidator = v::length(8, 64);
$ageValidator = v::intVal()->between(18, 120);

try {
    $usernameValidator->setName('Username')->assert($data['username']);
    $emailValidator->setName('Email')->assert($data['email']);
    $passwordValidator->setName('Password')->assert($data['password']);
    $ageValidator->setName('Age')->assert($data['age']);
    echo 'Все данные валидны!';
} catch (\Respect\Validation\Exceptions\NestedValidationException $e) {
    echo implode('<br>', $e->getMessages());
}

Результат при ошибке: "Username must contain only letters and digits" и т.д.

Когда использовать

  • Формы на сайтах — регистрация, обратная связь, заказ
  • REST API — проверка JSON-запросов перед обработкой
  • Импорт данных — валидация CSV/Excel перед записью в БД
  • Командные скрипты — проверка аргументов CLI

Respect\Validation подходит для проектов любого размера — от простых сайтов до фреймворков (Laravel, Symfony). Она заменяет громоздкие if-else конструкции и упрощает тестирование.

Рекомендаций