>> $r->any('/abc/:cde', {cde => qr/\d+/} )->to('module#foo');<div><br></div><div>В таких случаях я обычно пишу:</div><div><br></div><div>$r->any('/abc/:cde', {cde => qr/[1-9][0-9]*/} )->to('module#foo');<br>
<br><div class="gmail_quote">20 марта 2012 г. 20:24 пользователь Ivan Petrov <span dir="ltr"><<a href="mailto:i.petro.77.00@gmail.com">i.petro.77.00@gmail.com</a>></span> написал:<br><blockquote class="gmail_quote" style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div class="im"><br>
$r->> any('/abc/:cde', {cde => qr/\d+/} )->to('module#foo');<br>
<br>
</div>да это понятно. просто тут либо eq, либо регулярник.<br>
<br>
а нам надо было что если там просто скаляр, то он тоже является<br>
регулярником, ну и с числами получается функция по сути.<br>
<br>
наиболее частые случаи в плагин бы запхать интересно бы было<br>
<div class="HOEnZb"><div class="h5"><br>
> On Tue, 20 Mar 2012 20:57:48 +0400, Ivan Petrov<br>
> <<a href="mailto:i.petro.77.00@gmail.com">i.petro.77.00@gmail.com</a>> wrote:<br>
>> если для стешей (то есть плейсхолдеры в урле), то можно что-то в таком<br>
>> духе делать (кусок выдран прямо из проекта):<br>
>><br>
>>     $self->routes->add_condition(<br>
>>         number => sub {<br>
>>             my ($r, $c, $captures, $pattern) = @_;<br>
>>             $pattern = [ $pattern ] unless ref $pattern eq 'ARRAY';<br>
>>             for (@$pattern) {<br>
>>                 return unless exists $captures->{$_};<br>
>>                 return unless $captures->{$_} =~ /^\d+$/;<br>
>>                 return unless $captures->{$_};<br>
>>             }<br>
>>             return 1;<br>
>>         }<br>
>>     );<br>
>><br>
>>     $self->routes->add_condition(<br>
>>         like    => sub {<br>
>>             my ($r, $c, $captures, $pattern) = @_;<br>
>>             return unless 'HASH' eq ref $pattern;<br>
>>             for (keys %$pattern) {<br>
>>                 return unless exists $captures->{$_};<br>
>>                 if ('Regexp' eq ref $pattern->{$_}) {<br>
>>                     return unless $captures->{$_} =~ $pattern->{$_};<br>
>>                     next;<br>
>>                 }<br>
>>                 return unless $captures->{$_} =~ /\Q$pattern->{$_}\E/;<br>
>>             }<br>
>>             return 1;<br>
>>         }<br>
>>     );<br>
>><br>
>><br>
>> первый кондишен проверяет на корректность id-шники (должна быть<br>
>> цифра), второй на соответствие регулярному выражению.<br>
>><br>
>> использование какое-то такое:<br>
>><br>
$r->>> any('/abc/:cde')<br>
>>         ->over(number => 'cde')<br>
>>         ->to('module#foo');<br>
>><br>
$r->>> any('/abc/:cde/:def')<br>
>>         ->over(number => [ 'cde', 'def' ])<br>
>>         ->to('module#foo');<br>
>><br>
$r->>> get('/abc/:cde')<br>
>>         ->over(like => { cde => qr{^\d+$} })<br>
>>         ->to('module#foo');<br>
>><br>
>> Получается когда неправильное что-то в урле задано, то просто 404<br>
>> отвечается и все.<br>
>><br>
>> Интересно, кто-то оборачивал валидаторы для стешей в плагин? типа<br>
>> самое употребимое (а-ля вышеприведенный лайк и проверка id-шников)<br>
<br>
> --<br>
> Moscow.pm mailing list<br>
> <a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
--<br>
Moscow.pm mailing list<br>
<a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br>С уважением, Александр<br>Личный блог: <a href="http://eax.me/" target="_blank">http://eax.me/</a><br>Мой форум: <a href="http://it-talk.org/" target="_blank">http://it-talk.org/</a><br>
Мой Twitter: <a href="http://twitter.com/afiskon" target="_blank">http://twitter.com/afiskon</a><br><br>
</div>