[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