-
Notifications
You must be signed in to change notification settings - Fork 37
Validator
с версии 0.4.0
Пакет Validator предназначен для проверки входных данных. Пакет разработан с использование исходного кода проекта https://github.com/Respect/Validation, к сожалению, не получилось адаптировать данный пакет для использования его AS IS.
Глобальных настроек нет
Для сокращения объёма кода рекомендуется следующая запись для подключения класса Validator:
use \Bluz\Validator\Validator as v;Простой пример использования валидатора:
if (!v::string()->validate(123)) {
echo "String is required";
}Используя исключения:
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());
}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