-
Notifications
You must be signed in to change notification settings - Fork 39
Validator
с версии 0.4.0
с версии 0.5.0 добавлена поддержка метода
arrayInput($callback)
Пакет Validator предназначен для проверки входных данных. Пакет разработан с использование исходного кода проекта https://github.com/Respect/Validation, к сожалению, не получилось адаптировать данный пакет для использования его AS IS.
Глобальных настроек нет
Для сокращения объёма кода рекомендуется следующая запись для подключения класса Validator:
use \Bluz\Validator\Validator as v;Простой пример использования валидатора:
if (!v::string()->validate(123)) {
echo "It must be a string";
}Используя исключения:
try {
v::string()->assert(123);
} catch (\InvalidArgumentException $e) {
echo $e->getMessage();
}if (!v::string()->length(5, 10)->validate('foo bar')) {
echo "String must have a length between 5 and 10";
}$validator = v::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 = v::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 = v::string()->length(25, 40)->setName('description');
echo $validator;
// "description" must be a string
// "description" must have a length between 25 and 40Получение текста ошибки:
$validator = v::string()->length(25, 40);
if (!$validator->validate('foo bar')) {
echo $validator->getError();
}Установка произвольного текста ошибки:
$validator = v::regexp('/[a-z]/')
->regexp('/[A-Z]/')
->regexp('/[0-9]/')
->setError('Password must contain lowercase and uppercase letter, numbers and non-alfanumeric symbols')
echo $validator;
// Password must contain lowercase and uppercase letter, numbers and non-alfanumeric symbols
if (!$validator->validate('123456')) {
echo $validator->getError();
}В тексте ошибки можно использовать ключевые слова {{name}} и {{input}}, которые при выводе будут заменены на имя проверяемого и текущие входные данные соответственно:
$validator = v::regexp('/[a-z]/')
->regexp('/[A-Z]/')
->regexp('/[0-9]/')
->setName('Password')
->setError('{{name}} must contain lowercase and uppercase letter, numbers and non-alfanumeric symbols, but "{{input}}" received');Для проверки объекта либо ассоциативного массива следует использовать ValidatorBuilder:
$validator = new ValidatorBuilder();
// title validator
$validator->add(
'title',
v::required()->string()->notEmpty()
);
// alias validator
$validator->add(
'alias',
v::required()->string()->notEmpty(),
v::regexp('/^[a-zA-Z0-9_\.\-]+$/i')
->setError('Alias should contains only Latin characters, dots and dashes'),
v::callback(function($input) use ($data) {
if ($row = $this->getTable()->findRowWhere(['alias' => $input])) {
if ($row->id != $data['id']) {
return false;
}
}
return true;
})->setError('Alias "{{input}}" already exists')
);
if (!$validator->validate($data)) {
$this->setErrors($validator->getErrors());
}- alpha($additionalCharacters = '') - проверка на буквы алфавита, внутри используется
ctype_alpha, с соответствующей зависимостью от установленной локали дляLC_CTYPE, разрешает пробельные символы - alphaNumeric($additionalCharacters = '') - проверка на буквы алфавита и цифры, внутри используется
ctype_alnum, разрешает пробельные символы - arrayInput($callback) - проверка массива любой callable структурой (это может быть как встроенная функция, так и другое правило из данного пакета)
- between($min, $max, $inclusive = false) - проверка на вхождение в диапазон
- callback($callback) - проверка с использованием функции обратного вызова, поддерживается все
callableструктуры - condition($condition) - для проверки используется произвольное условие
- contains($containsValue, $identical = false) - содержит заданный элемент
- countryCode() - проверка на ISO 3166-1 alpha-2
- creditCard() - проверка номера кредитной карточки алгоритмом Луна
- date($format) - проверка даты на соответствие заданному формату
- domain($checkDns = false) - проверка доменного имени
- email($checkDns = false) - проверка email
- equals($compareTo, $identical = false) - сравнение с заданным значением
- float() - число с плавающей запятой
- in($haystack, $identical = false) - вхождение в заданный массив данных - массив или строку
- integer() - целое число
- ip($options = null) - проверка IP адреса, можно задать диапазон для проверки
- json() - строка с JSON
- latin($additionalCharacters = '') - проверка на буквы латинского алфавита, запрещает пробельные символы
- latinNumeric($additionalCharacters = '') - проверка на буквы латинского алфавита и цифры, запрещает пробельные символы
- length($min = null, $max = null, $inclusive = true) - проверка длины строки или массива
- max($maxValue, $inclusive = false) - проверка максимального значения
- min($minValue, $inclusive = false) - проверка минимального значения
- notEmpty() - не пустое значение, обёртка над
empty() - noWhitespace() - без пробелов
- numeric() - число
- required() - обязательное поле, отсеивает по
isset(), и сравнению сnull,falseи пустой строкой - regexp($expression) - проверка по регулярному выражению
- string() - строка
Acl
Application
Auth
Cache
Common
— Exception
— Collection
— Container
— Helper
— Options
— Singleton
Config
Controller
— Data
— Mapper
—— Crud
—— Rest
— Reflection
Crud
— Crud Table
Db
— Row
— Table
— Relations
— Query
Debug
EventManager
Grid
Http
Layout
Logger
Mailer
Messages
Nil
Proxy
Registry
Request
Response
Router
Session
Translator
Validator
View