>> $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
<[email protected]>написал:
>
> $r->> any('/abc/:cde', {cde => qr/\d+/} )->to('module#foo');
>
> да это понятно. просто тут либо eq, либо регулярник.
>
> а нам надо было что если там просто скаляр, то он тоже является
> регулярником, ну и с числами получается функция по сути.
>
> наиболее частые случаи в плагин бы запхать интересно бы было
>
> > On Tue, 20 Mar 2012 20:57:48 +0400, Ivan Petrov
> > <[email protected]> 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
> > [email protected] | http://moscow.pm.org
> --
> Moscow.pm mailing list
> [email protected] | http://moscow.pm.org
>
--
С уважением, Александр
Личный блог: http://eax.me/
Мой форум: http://it-talk.org/
Мой Twitter: http://twitter.com/afiskon
--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org