Валидатор

Оглавление

1. Введение
2. Список методов
3. Предустановленные описания ошибок
4. Примеры




Введение #


При работе с внешними данными, к примеру из форм, часто возникает потребность валидации значений. Допустим нужно проверить корректность E-mail, либо латиницу или числовые значения. Для этого фреймворк имеет сервис валидатора.

Инициализируется он так:
1
2
3

    $validtor 
ABC::newService(ABC::VALIDATOR);





В классе имеются следующие публичные методы #
К оглавлению

1 setDescriptions() Устанавливает массив описания ошибок
2 checkEmpty() Проверка значения на пустоту
3 checkInt() Проверка значения на int
4 checkFloat() Проверка значения на float
5 checkEmail() Проверка значения на корректный e-mail
6 checkIp() Проверка значения на корректный IP
7 checkLatin() Проверка значения на латиницу
8 checkByRegExp() Проверка значения по регулярному выражению
9 filterVar() Проверка значения функцией filter_var()
10 customCheck() Пользовательская валидация
11 isValid() Проверка на наличие ошибок
12 getErrors() Вывод ошибок
13 __toString() Вывод ошибок в виде строки




setDescriptions() public method
К списку методов

Устанавливает массив возможных пользовательских ошибок.

Метод задаст массив описания ошибок, возвращаемых валидатором. Если метод не вызван, будет использован предустановленный массив.

public Validator::setDescriptions ( $descriptions )
$descriptions array Массив описаний ошибок.
return void




checkEmpty() public method
К списку методов

Проверка на пустоту.

Проверяет, не пустое ли значение. Ноль не считается пустым.

public Validator::checkEmpty ( $value, $label = '' )
$value mix Проверяемое значение
$label string|array Массив или строка с описанием ошибки. Смотри пример.
return boolean Результат валидации




checkInt() public method
К списку методов

Проверка на integer.

Проверяет, является ли значение типом integer

public Validator::checkInt ( $value, $label = '' )
$value mix Проверяемое значение
$label string|array Массив или строка с описанием ошибки. Смотри пример.
return boolean Результат валидации




checkFloat() public method
К списку методов

Проверка на float.

Проверяет, является ли значение типом float

public Validator::checkFloat ( $value, $label = '' )
$value mix Проверяемое значение
$label string|array Массив или строка с описанием ошибки. Смотри пример.
return boolean Результат валидации




checkEmail() public method
К списку методов

Проверка на E-mail.

Проверяет, является ли значение валидным E-mail адресом

public Validator::checkEmail ( $value, $label = '' )
$value mix Проверяемое значение
$label string|array Массив или строка с описанием ошибки. Смотри пример.
return boolean Результат валидации




checkIp() public method
К списку методов

Проверка на IP.

Проверяет, является ли значение валидным IP адресом

public Validator::checkIp ( $value, $label = '' )
$value mix Проверяемое значение
$label string|array Массив или строка с описанием ошибки. Смотри пример.
return boolean Результат валидации




checkLatin() public method
К списку методов

Проверка на латиницу.

Пропускает только латинские символы, цифры, дефис и знак подчеркивания.

public Validator::checkLatin ( $value, $label = '', $full = false )
$value mix Проверяемое значение
$label string|array Массив или строка с описанием ошибки. Смотри пример.
$full boolean Определяет, валидно ли пустое значение. Если установить true, то валидно.
return boolean Результат валидации




checkByRegExp() public method
К списку методов

Проверка по RegExp.

Проверяет соответствие переданному регулярному выражению.

public Validator::checkByRegExp ( $value, $regExp, $label = '' )
$value mix Проверяемое значение
$regExp string Регулярное выражение, по которому будет осуществляться валидация
$label string|array Массив или строка с описанием ошибки. Смотри пример.
return boolean Результат валидации




filterVar() public method
К списку методов

Обертка над filter_var().

Метод работает аналогично нативной функции filter_var() с тем отличием, что позволяет установить пользовательское описание ошибки.

public Validator::filterVar ( $value, $filter, $options = null, $label = '' )
$value mix Проверяемое значение
$filter string Идентификатор (ID) применяемого фильтра. Возможные значения здесь.
$options array Ассоциативный массив параметров, либо логическая дизъюнкция (операция ИЛИ) флагов.
$label string|array Массив или строка с описанием ошибки. Смотри пример.
return boolean Результат валидации




customCheck() public method
К списку методов

Пользовательская валидация.

Метод позволяет внедрить в валидатор любые кастомные правила проверки в виде функции обратного вызова.

public Validator::customCheck ( $callable, $label = '' )
$callable callable Пользовательский валидатор в виде замыкания.
$label string|array Массив или строка с описанием ошибки. Смотри пример.
return boolean Результат валидации




isValid() public method
К списку методов

Проверка наличия ошибок.

Метод проверяет, были ли ошибки при валидации данных.

public Validator::isValid ( )
return boolean true, если данные валидны и ошибок нет. false в противном случае.




getErrors() public method
К списку методов

Возвращает описания ошибок.

Если в процессе валидации данных были получены ощибки, метод вернет их описания в виде массива.

public Validator::getErrors ( )
return mix Массив ошибок, если они были, либо null в противном случае.




__toString() public method
К списку методов

Возвращает описания ошибок.

Если в процессе валидации данных были получены ощибки, магический метод вернет их описания в виде строки, если обратиться к объекту, как к строке.

public Validator::__toString ( )
return string Ошибки в виде строки с разделителем \n, если они были, либо пустую строку в противном случае.




Прредустановленные описания ошибок #
К оглавлению
1
2
3
4
5
6
7
8

 
'EMPTY_FIELD'     => 'Поле %s не может быть пустым',
 
'NO_INT'          => 'Значение поля %s должно быть целочисленным',
 
'NO_FLOAT'        => 'Значение поля %s должно быть числом или дробью',
 
'INVALID_EMAIL'   => 'Значение поля %s должно быть корректным E-mail адресом',
 
'INVALID_IP'      => 'Значение поля %s должно быть корректным IP адресом',
 
'NO_LATIN'        => 'В поле %s допустимы только латинские символы, цифры, дефис и подчеркивание',






Примеры использования #
К оглавлению

Простое использование сервиса. #
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

    
// Допустим имеются такие данные:
    
$post = ['login'    => 'Петя',
             
'password' => '',
             
'email'    => 'mail'
    
];

    
// Запускаем сервис
    
$validator ABC::newService(ABC::VALIDATOR);
    
// Проверяем логин на латиницу
    
$validator->checkLatin($post['login'], '"Логин"');
    
// Пароль на пустоту
    
$validator->checkEmpty($post['password'], '"Пароль"');
    
// E-mail на корректность
    
$validator->checkEmail($post['email'], '"E-mail"');
    
    if (
$validator->isValid()) {
        
// Здесь какие то действия, если данные валидны
    
} else { 
        
// Либо выводим ошибки
        
echo nl2br((string)$validator);
    }
/*
    РЕЗУЛЬТАТ

    В поле "Логин" допустимы только латинские символы, цифры, дефис и подчеркивание
    Поле "Пароль" не может быть пустым
    Значение поля "E-mail" должно быть корректным E-mail адресом

*/    




Установка описания ошибок. Проверка по регулярному выражению и функцией filter_var() #
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40

    
// Допустим имеются такие данные:
    
$post = ['phone'    => '+7(903)900-12-34444444',
             
'uri'      => 'abc-framework.ru'
    
];
    
    
// Запускаем сервис
    
$validator ABC::newService(ABC::VALIDATOR);    
    
// Устанавливаем массив описания ошибок
    // Элементы будут добавлены в предустановленный массив,
    // либо перезапишут существующие
    
$errors = ['INVALID_PHONE' => 'Номер %s невалиден',
               
'INVALID_URI'   => 'URI %s невалиден'
    
];
    
$validator->setDescriptions($errors);
    
    
// Проверяем номер российского телефона по маске
    
$pattern '^((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$';
    
$validator->checkByRegExp($post['phone'], $pattern, ['INVALID_PHONE' => 'президента']);
    
    
// Проверяем URI с помощью filter_var()
    
$validator->filterVar($post['uri'], 
                          
FILTER_VALIDATE_URL
                          
FILTER_FLAG_SCHEME_REQUIRED
                          [
'INVALID_URI'   => 'сайта']);
    
    if (
$validator->isValid()) {
        
// Здесь какие то действия, если данные валидны
    
} else { 
        
// Либо выводим ошибки
        
echo  nl2br((string)$validator);
    }
/*
    РЕЗУЛЬТАТ

    Номер президента невалиден
    URI сайта невалиден

*/ 




Использование кастомных валидаторов #
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

    
// Запускаем сервис
    
$validator ABC::newService(ABC::VALIDATOR);    

    
// Имеем такой логин:
    
$login  'user';
    
// Проверяем его уникальность
    
$validator->customCheck(function () use ($login) {
    
// какие то действия по проверке уникальности
        
if ($login === 'user') {
            return 
false;
        }
        
        return 
true;
    }, 
"Логин $login уже зарегистрирован в системе");
    
    if (
$validator->isValid()) {
        
// Здесь какие то действия, если данные валидны
    
} else { 
        
// Либо выводим ошибки
        
echo nl2br((string)$validator);
    }
/*
    РЕЗУЛЬТАТ

    Логин user уже зарегистрирован в системе

*/