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

Ivan Petrov i.petro.77.00 на gmail.com
Вт Мар 20 10:24:47 PDT 2012


$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