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 mailing list [email protected] | http://moscow.pm.org
