-
Notifications
You must be signed in to change notification settings - Fork 37
Validator
с версии 0.4.0
с версии 0.5.0 добавлена поддержка методаarrayInput($callback)
c версии 1.0.0 переименованы правилаStringвStringInput,FloatвFloatInput
Пакет 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::stringInput()->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::stringInput()->length(25, 40)->setName('description');
echo $validator;
// "description" must be a string
// "description" must have a length between 25 and 40Получение текста ошибки:
$validator = v::stringInput()->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