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

Alexandr Alexeev afiskon на gmail.com
Вт Мар 20 18:31:21 PDT 2012


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

В таких случаях я обычно пишу:

$r->any('/abc/:cde', {cde => qr/[1-9][0-9]*/} )->to('module#foo');

20 марта 2012 г. 20:24 пользователь Ivan Petrov
<i.petro.77.00 на gmail.com>написал:

>
> $r->> any('/abc/:cde', {cde => qr/\d+/} )->to('module#foo');
>
> да это понятно. просто тут либо eq, либо регулярник.
>
> а нам надо было что если там просто скаляр, то он тоже является
> регулярником, ну и с числами получается функция по сути.
>
> наиболее частые случаи в плагин бы запхать интересно бы было
>
> > 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 mailing list
> > moscow-pm на pm.org | http://moscow.pm.org
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>



-- 
С уважением, Александр
Личный блог: http://eax.me/
Мой форум: http://it-talk.org/
Мой Twitter: http://twitter.com/afiskon
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20120321/b39c2e1a/attachment.html>


Подробная информация о списке рассылки Moscow-pm