[Moscow.pm] Очередной вопрос новичка о Mojolicious

iSage isage на aumi.ru
Вт Мар 20 10:10:08 PDT 2012


Охххх...

 $r->any('/abc/:cde', {cde => qr/\d+/} )->to('module#foo');


On Tue, 20 Mar 2012 20:57:48 +0400, Ivan Petrov
<i.petro.77.00 на gmail.com> wrote:
> если для стешей (то есть плейсхолдеры в урле), то можно что-то в таком
> духе делать (кусок выдран прямо из проекта):
> 
>     $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