Написал небольшой плагин для Mojolicious - Mojolicious::Plugin::ValidateTiny. По сути - это обертка над Validate::Tiny с дополнительными удобными плюшками.
Для валидации входящий параметров мы просто используем хелпер:
По-умолчанию, включена опция "autofields", которая позволяет использовать сокращенный вариант правил проверки. И вместо:
Также очень полезна опции "explicit", которая обязывает нас описать явно правила валидации для каждого поля. По-умолчанию, выключена, но в своих проекта я всегда ее включаю.
Кроме хелпера "validator_error", есть еще хелпер "validator_any_error".
На CPAN есть еще один хороший плагин для валидации - Mojolicious::Plugin::Validator, возможно он придется кому-то больше по душе.
UPD: Описание возможностей Validate::Tiny
Для валидации входящий параметров мы просто используем хелпер:
$self->do_validation($validate_rules);$validate_rules - это описание проверок в формате Validate::Tiny.
По-умолчанию, включена опция "autofields", которая позволяет использовать сокращенный вариант правил проверки. И вместо:
{
fields => ['user', 'pass'],
checks => [user => is_required(), pass => is_required()]
}
можно писать:
[ user => is_required(), pass => is_required() ]и fields автоматически заполнятся исходя из описания проверок.
Также очень полезна опции "explicit", которая обязывает нас описать явно правила валидации для каждого поля. По-умолчанию, выключена, но в своих проекта я всегда ее включаю.
Кроме хелпера "validator_error", есть еще хелпер "validator_any_error".
my $errors = $self->validator_error; # hashref with errors
my $pass_error = $self->validator_error('pass'); # password error text
my $any_error = $self->validator_any_error; # any error
На CPAN есть еще один хороший плагин для валидации - Mojolicious::Plugin::Validator, возможно он придется кому-то больше по душе.
UPD: Описание возможностей Validate::Tiny

6 коммент.:
Более чем доволен плагином от vti. Он еще подставляет заполненные пользователем поля в случае ошибки и позволяет легко выводить напротив полей с ошибками описание, что было сделано не так. Умеет ли это ваш плагин?
>Он еще подставляет заполненные пользователем поля в случае ошибки и позволяет легко выводить напротив полей с ошибками описание
Для этого в моем плагине есть аналогичный хелпер - "validator_error".
В контроллере получить текст ошибки можно так:
$self->validator_error('param_name');
в шаблоне так:
<%= validator_error 'param_name' %>
Описание возможностей Validate::Tiny - http://ifnx.com/articles/2012/1/minimalistic-data-validation.html
Хотелось бы валидатор которые воспринимал правила из jquery плагина validate, что бы не дублировать backend и frontend.
Вот думаю написать свой велосипед? Как считаете правильно я мыслю?
Многие к этому приходят. Если у Вас получится удобный в использовании инструмент - это будет отлично.
Сразу озвучу несколько моментов:
1. На клиент-сайде может использоваться несколько валидаторов. Например, у меня используется jQgrid и его родная валидация.
2. Как быть с многоязычностью сообщений? Например, если сообщение выглядит - lang("username is required"), как это правильно преобразовать в сервер-сайд код?
3. Правила валидации могут содержать ссылки на функции. Как это обрабатывать?
Простое и приемлемое решение для меня - это генератор кода. На входе - правила jquery.validate, а на выходе - правила для какого-нибудь популярного сервер-сайд валидатора (например, в формате Validate::Tiny, или возможно даже в нескольких форматах, на выбор). Полученные правила можно немного отредактировать, добавить поддержку локализации и вставить в основной код.
Либо, можно использовать какой-то свой формат описания правил и генерировать исходя из него правила для Perl валидатора и правила для JS-валидатора.
Согласен, вариант с транслятором правил в/из jquery плагины самый оптимальный.
Отправить комментарий
Не забудьте добавить себя в постоянные читатели и включить уведомления о новых комментариях, либо воспользуйтесь RSS каналом ;)