[Moscow.pm] Очередной вопрос новичка о Mojolicious
Ivan Petrov
i.petro.77.00 на gmail.com
Вт Мар 20 09:57:48 PDT 2012
On 11:04 Tue 20 Mar , Тимофей Марков wrote:
> Точнее о Mojolicious::Lite
> Приветствую уважаемый Moscow.pm. Прошу простить за еще один нубский вопрос но
> самостоятельно додуматься у меня не получается. : <http://perl5doc.ru/cpan/
> Mojolicious::Lite" style="text-decoration:none">Как проверить данные, которые я
> забираю из адресной строки с помощью команды param. Как то так:
> $user = $self->param('user');
> Цель моя - фильтровать служебные символы (безопасности ради).
> Я почти уверен что в Mojolicious есть готовое решение для этого, ну или
> устоявшееся красивое решение(а может все автоматом проверяется?). Допустим с
> помощью if и регулярок я б решил задачу, но моему решению будет очень далеко до
> изящности и краткости, потому и прошу помощи.
> Заранее Благодарен.
> Тимофей
если для стешей (то есть плейсхолдеры в урле), то можно что-то в таком
духе делать (кусок выдран прямо из проекта):
$self->routes->add_condition(
number => sub {
my ($r, $c, $captures, $pattern) = @_;
$pattern = [ $pattern ] unless ref $pattern eq 'ARRAY';
for (@$pattern) {
return unless exists $captures->{$_};
return unless $captures->{$_} =~ /^\d+$/;
return unless $captures->{$_};
}
return 1;
}
);
$self->routes->add_condition(
like => sub {
my ($r, $c, $captures, $pattern) = @_;
return unless 'HASH' eq ref $pattern;
for (keys %$pattern) {
return unless exists $captures->{$_};
if ('Regexp' eq ref $pattern->{$_}) {
return unless $captures->{$_} =~ $pattern->{$_};
next;
}
return unless $captures->{$_} =~ /\Q$pattern->{$_}\E/;
}
return 1;
}
);
первый кондишен проверяет на корректность id-шники (должна быть
цифра), второй на соответствие регулярному выражению.
использование какое-то такое:
$r->any('/abc/:cde')
->over(number => 'cde')
->to('module#foo');
$r->any('/abc/:cde/:def')
->over(number => [ 'cde', 'def' ])
->to('module#foo');
$r->get('/abc/:cde')
->over(like => { cde => qr{^\d+$} })
->to('module#foo');
Получается когда неправильное что-то в урле задано, то просто 404
отвечается и все.
Интересно, кто-то оборачивал валидаторы для стешей в плагин? типа
самое употребимое (а-ля вышеприведенный лайк и проверка id-шников)
Подробная информация о списке рассылки Moscow-pm