[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