Валидатор
Оглавление
1.
Введение
2.
Список методов
3.
Предустановленные описания ошибок
4.
Примеры
Введение #
При работе с внешними данными, к примеру из форм, часто возникает потребность валидации значений. Допустим нужно проверить корректность E-mail, либо латиницу или числовые значения. Для этого фреймворк имеет сервис валидатора.
Инициализируется он так:
1
2
3
$validtor = ABC::newService(ABC::VALIDATOR);
В классе имеются следующие публичные методы #
К оглавлению
К списку методов
Устанавливает массив возможных пользовательских ошибок.
Метод задаст массив описания ошибок, возвращаемых валидатором. Если метод не вызван, будет использован предустановленный массив.
К списку методов
Проверка на пустоту.
Проверяет, не пустое ли значение. Ноль не считается пустым.
К списку методов
Проверка на integer.
Проверяет, является ли значение типом integer
К списку методов
Проверка на E-mail.
Проверяет, является ли значение валидным E-mail адресом
К списку методов
Проверка на IP.
Проверяет, является ли значение валидным IP адресом
К списку методов
Проверка на латиницу.
Пропускает только латинские символы, цифры, дефис и знак подчеркивания.
public Validator::checkLatin ( $value, $label = '', $full = false ) |
$value |
mix |
Проверяемое значение |
$label |
string|array |
Массив или строка с описанием ошибки. Смотри пример. |
$full |
boolean |
Определяет, валидно ли пустое значение. Если установить true, то валидно. |
return |
boolean |
Результат валидации |
К списку методов
Проверка по RegExp.
Проверяет соответствие переданному регулярному выражению.
public Validator::checkByRegExp ( $value, $regExp, $label = '' ) |
$value |
mix |
Проверяемое значение |
$regExp |
string |
Регулярное выражение, по которому будет осуществляться валидация |
$label |
string|array |
Массив или строка с описанием ошибки. Смотри пример. |
return |
boolean |
Результат валидации |
К списку методов
Обертка над filter_var().
Метод работает аналогично нативной функции filter_var() с тем отличием, что позволяет установить пользовательское описание ошибки.
public Validator::filterVar ( $value, $filter, $options = null, $label = '' ) |
$value |
mix |
Проверяемое значение |
$filter |
string |
Идентификатор (ID) применяемого фильтра. Возможные значения здесь. |
$options |
array |
Ассоциативный массив параметров, либо логическая дизъюнкция (операция ИЛИ) флагов. |
$label |
string|array |
Массив или строка с описанием ошибки. Смотри пример. |
return |
boolean |
Результат валидации |
К списку методов
Пользовательская валидация.
Метод позволяет внедрить в валидатор любые кастомные правила проверки в виде функции обратного вызова.
К списку методов
Проверка наличия ошибок.
Метод проверяет, были ли ошибки при валидации данных.
public Validator::isValid ( ) |
return |
boolean |
true, если данные валидны и ошибок нет. false в противном случае. |
К списку методов
Возвращает описания ошибок.
Если в процессе валидации данных были получены ощибки, метод вернет их описания в виде массива.
public Validator::getErrors ( ) |
return |
mix |
Массив ошибок, если они были, либо null в противном случае. |
К списку методов
Возвращает описания ошибок.
Если в процессе валидации данных были получены ощибки, магический метод вернет их описания в виде строки, если обратиться к объекту, как к строке.
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 уже зарегистрирован в системе
*/