...
| Блок кода | ||||
|---|---|---|---|---|
| ||||
package Portal::Validations;
use strict;
use warnings FATAL => 'all';
# Обязательно для экспорта
use Exporter;
use parent 'Exporter';
# Указываем в экспортах схемы валидаций
our @EXPORT = qw(
POST_PORTAL_ARTICLES
);
our @EXPORT_OK = qw(
POST_PORTAL_NEWSLETTER
);
use constant {
# Объявляем схему константы
POST_PORTAL_ARTICLES => {
# Указываем поля, которые нужно валидировать
TITLE => {
# Поле должно присутствовать
required => 1,
# Тип поля
type => 'string',
# Для "string" - минимальная длина
min_length => 5,
# Для "string" - минимальнаямаксимальная длина
max_length => 25,
},
DATE => {
required => 1,
type => 'date'
},
PORTAL_MENU_ID => {
required => 1,
type => 'unsigned_integer'
},
SHORT_DESCRIPTION => {
# Поле может быть не обязательным, но при его присутствии можем валидировать
type => 'string',
max_length => 600
},
CONTENT => {
# Также мы можем указать кастомный тип, и проверять его вручную
type => 'custom',
function => \&check_content,
}
},
};
# Функция для проверки поля CONTENT
sub check_content {
my ($validator, $value) = @_;
# $validator при себе имеет объекты db, conf, admin, так что вы можете создавать любой объект и за нужды производить запросы в базу.
# Но мы не рекомендуем такой способ валидации, только в совсем узких случаях.
if ($value && $value =~ /ABillS/g) {
# Успешная валидация
return { result => 1 };
}
else {
return {
result => 0,
# Мы очень рекомендуем оставлять errstr в string, почему валидация не была пройдена.
errstr => 'There is no ABillS in your content.'
# Также вы можете прикрепить любое другое поле с объяснением, что не так.
# Это может быть любое другое значение, которые может сериализоваться в JSON.
some_additional_message => [{
WHERE => 'ABillS'
}]
}
}
}
1;
|
...