Skip to content
Anton edited this page Sep 12, 2017 · 25 revisions

Описание

с версии 0.4.0
с версии 0.5.0 добавлена поддержка метода arrayInput($callback)
c версии 1.0.0 переименованы правила String в StringInput, Float в FloatInput
с версии 7.7.0 изменён синтаксис ValidatorBuilder, и переименован в ValidatorForm, добавлен ValidatorChain
с версии 7.7.4 изменено поведение при вызове валидаторов через Validator::__staticCall, теперь возвращается ValidatorChain

Пакет Validator предназначен для проверки входных данных. Пакет разработан с использование исходного кода проекта https://github.com/Respect/Validation, к сожалению, не получилось адаптировать данный пакет для использования его AS IS.

Настройки

Глобальных настроек нет

Использование

Подключение класса Validator:

use \Bluz\Validator\Validator;

Простой пример использования валидатора:

if (!Validator::string()->validate(123)) {
    echo "It must be a string";
}

Используя альтернативный синтаксис с вызовом __invoke():

if (!Validator::string()(123)) {
    echo "It must be a string";
}

Цепочка правил

if (!Validator::string()->length(5, 10)->validate('foo bar')) {
    echo "String must have a length between 5 and 10";
}

Повторное использование

$validator = Validator::string()->length(25, 40);

if (!$validator->validate('foo bar')) {
    echo "String must have a length between 25 and 40\n";
}

if (!$validator->validate('baz qux')) {
    echo "String must have a length between 25 and 40\n";
}

Альтернативный вариант с использованием __invoke():

$numberValidator = Validator::integer()->min(25)->max(40);

if (!$numberValidator(5)) {
    echo "Number should be integer between 25 and 40\n";
}

if (!$numberValidator(42)) {
    echo "Number should be integer between 25 and 40\n";
}

Текст ошибок и правила проверки

Получение описания правил для проверки:

$validator = Validator::string()->length(25, 40);

echo $validator;
// >> must be a string
// >> must have a length between 25 and 40

Замена описания для всей цепочки вызовов:

$validator = Validator::string()->length(25, 40)->setDescription('description');

echo $validator;
// >> description

Получение текста ошибки цепочки:

$validator = Validator::string()->length(25, 40);

if (!$validator->validate('foo bar')) {
    echo $validator->getError();
}

Установка произвольного текста ошибки для regexp и callback правил:

// method Validator::create return new instance of ValidatorChain
$validator = Validator::create()->
    ->regexp('/[a-z]/', 'Password must contain lowercase letters')
    ->regexp('/[A-Z]/', 'Password must contain uppercase letters')
    ->regexp('/[0-9]/', 'Password must contain numbers ')

echo $validator;
// >> Password must contain lowercase letters
// >> Password must contain uppercase letters
// >> Password must contain numbers 

if (!$validator->validate('123456')) {
    echo $validator->getError();
}

Проверка массива

Для проверки ассоциативного массива следует использовать ValidatorForm:

$validator = new ValidatorForm();

// title validator
$validator->add('title')
    ->required()
    ->string()
    ->notEmpty();

// alias validator
$validator->add('alias')
    ->required()
    ->string()
    ->notEmpty()
    ->regexp('/^[a-zA-Z0-9_\.\-]+$/i', 'Alias should contains only Latin characters, dots and dashes')
    ->callback(
        function($input) use ($data) {
            if ($row = $this->getTable()->findRowWhere(['alias' => $input])) {
                if ($row->id != $data['id']) {
                    return false;
                }
            }
            return true;
        },
        'Alias already exists'
    );

if (!$validator->validate($data)) {
    $validator->getErrors();
}

Список доступных правил

  • alpha($additionalCharacters = '') - проверка на буквы алфавита, внутри используется ctype_alpha, с соответствующей зависимостью от установленной локали для LC_CTYPE, разрешает пробельные символы
  • alphaNumeric($additionalCharacters = '') - проверка на буквы алфавита и цифры, внутри используется ctype_alnum, разрешает пробельные символы
  • array($callback) - проверка массива любой callable структурой (это может быть как встроенная функция, так и другое правило из данного пакета)
  • between($min, $max, $inclusive = false) - проверка на вхождение в диапазон
  • callback($callback, $description = '') - проверка с использованием функции обратного вызова, поддерживается все callable структуры
  • condition($condition) - для проверки используется произвольное условие
  • contains($containsValue) - содержит заданный элемент
  • containsStrict($containsValue) - содержит заданный элемент
  • countryCode() - проверка на ISO 3166-1 alpha-2
  • creditCard() - проверка номера кредитной карточки алгоритмом Луна
  • date($format) - проверка даты на соответствие заданному формату
  • domain($checkDns = false) - проверка доменного имени
  • email($checkDns = false) - проверка email
  • equals($compareTo, $identical = false) - сравнение с заданным значением
  • float() - число с плавающей запятой
  • in($haystack) - вхождение в заданный массив данных - массив или строку
  • inStrict($haystack) - вхождение в заданный массив данных - массив или строку
  • integer() - целое число
  • ip($options = null) - проверка IP адреса, можно задать диапазон для проверки
  • json() - строка с JSON
  • latin($additionalCharacters = '') - проверка на буквы латинского алфавита, запрещает пробельные символы
  • latinNumeric($additionalCharacters = '') - проверка на буквы латинского алфавита и цифры, запрещает пробельные символы
  • length($min = null, $max = null, $inclusive = true) - проверка длины строки или массива
  • less($maxValue) - проверка максимального значения
  • lessOrEqual($maxValue) - проверка максимального значения
  • more($minValue) - проверка минимального значения
  • moreOrEqual($minValue) - проверка минимального значения
  • notEmpty() - не пустое значение, обёртка над empty()
  • noWhitespace() - без пробелов
  • numeric() - число
  • required() - обязательное поле, отсеивает по isset(), и сравнению с null, false и пустой строкой
  • regexp($expression, $description = '') - проверка по регулярному выражению
  • string() - строка

Подключение новых правил

Для подключения новых правил валидации следует вызвать статический метод Validator::addRuleNamespace($namespace) и добавить неймспейс с вашими правилами, правила подключаться автоматически:

use Bluz\Validator\Validator;
Validator::addRuleNamespace('\\MyNameSpace\\Rule\\');
// your class \MyNameSpace\Rule\MyCustomRule 
// should load by composer autoloader
Validator::myCustom()->validate($input);