Ну и понятно, каждый новый фильтр дополняет предыдущие, обработка может быть прервана любым фильтром, который вернет ложь.
7 декабря 2016 г., 13:26 пользователь Akzhan Abdulin < [email protected]> написал: > Как уже показывал - можно подсмотреть в http://v32.rusrails.ru/actio > n-controller-overview/filters > > Для чего это очень удобно: > > Например, маршруты get one, put, patch, delete скорее всего требуют > одинакового действия - загрузки экземпляра сущности, для дальнейших > действий над ним, либо возврата HTTP::Status::HTTP_NOT_FOUND. > > Пример тоже уже скидывал: > > use HTTP::Status qw( HTTP_NOT_FOUND ); > > before_filter extract_message => sub { > my $self = shift; > my $message = MyModel::Message->find( $self->param('id') ) > or do { > $self->render( json => { success => \0, error => 'Not found' > }, status => HTTP_NOT_FOUND ); > return; # nok > }; > $self->stash( message => $message ); > return 1; # ok, filter proceed successfully > }; > > get '/message/:id' => { filter => 'extract_message' }, sub { > my $self = shift; > my $message = $self->stash('message'); # We always have message here! > }; > > put '/template/:id' => { filter => 'extract_message' }, sub { > my $self = shift; > my $message = $self->stash('message'); # We always have message here! > }; > > delete '/template/:id' => { filter => [ 'extract_message' ] }, sub { > my $self = shift; > my $message = $self->stash('message'); # We always have message here! > }; > > > 6 декабря 2016 г., 17:06 пользователь Konstantin S. Uvarin < > [email protected]> написал: > > Приветствую! >> >> Я так понял, фильтры - это хуки, которые втыкаются на определённый путь >> и все нижележащие пути? С одной стороны, руки уже чешутся написать, с >> другой, там очень легко перегнуть палку и сделать чересчур... >> >> Но спасибо за идею. >> >> 2016-12-03 1:00 GMT+02:00 Akzhan Abdulin <[email protected]>: >> >>> Не хватает фильтров, как минимум (в том же Mojo они тоже туповаты, >>> каждый over перекрывает предыдущие, вместо расширения). >>> >>> >>> На досуге почитайте http://www.sinatrarb.com/intro.html >>> >>> >>> 2 декабря 2016 г., 17:39 пользователь Konstantin S. Uvarin via Moscow-pm >>> <[email protected]> написал: >>> >>>> Приветствую всех! >>>> >>>> Сегодня я бы хотел представить веб-фреймворк на перл 5 собственного >>>> сочинения, Ниф (Not Even A Framework). Написан он больше для >>>> самообразования, т.к. и так их как собак нерезаных, но мне кажется, в нём >>>> есть некие здравые идеи. Суть такова: >>>> >>>> 1. Приложение разбивается на маленькие процедуры-хэндлеры, привязанные >>>> к пути в URI (см. тж. https://metacpan.org/pod/Dancer ) >>>> >>>> 2. Хэндлер получает на вход объект запроса, из которого потом достаются >>>> параметры, куки, заголовки и т.д. (см. тж. >>>> https://metacpan.org/pod/Kelp ) >>>> >>>> 3. Параметры и куки нельзя достать без валидации, например, при помощи >>>> регулярного выражения: >>>> >>>> $req->param( foo => qr/\d+/ ); >>>> >>>> См. тж. perl -T >>>> >>>> В качестве альтернативы есть самовалидирующиеся формы на базе >>>> Validator::LIVR или самописного каличного движка (но ЛИВР лучше). >>>> >>>> См. тж. https://metacpan.org/pod/Validator::LIVR и >>>> https://metacpan.org/pod/Data::CGIForm >>>> >>>> 4. Хэндлер может вернуть ссылку на хэш с какими угодно параметрами, >>>> которая затем передаётся в шаблонизатор для рендеринга. На данный момент >>>> поддерживается Template::Toolkit и JSON/JSONP >>>> >>>> Также есть ограниченный набор ключей с минусом, которые используются >>>> для управления самим фреймворком - -template, -status и т.п >>>> >>>> 5. Хэндлер может выбросить исключение: die 404 - легальный способ >>>> вернуть настраиваемую страницу not found. Все нормальные исключения (не >>>> трёхцифренные и не специальные объекты самого Neaf) трактуются как error >>>> 500. >>>> >>>> 6. Один и тот же код может в неизменном виде запускаться как cgi, psgi >>>> и под Apache2 + mod_perl (с некоторым бубном). Также поддерживается дебаг >>>> из командной строки: >>>> >>>> perl myapp.pl --help >>>> perl myapp.pl --list >>>> >>>> 7. Кроме этого есть поддержка статических страниц (не надо держать >>>> отдельно нормальный веб-сервер, чтобы проверить CSS или логотип), сессий в >>>> несколько недоделанном виде (планируется улучшение), отложенные действия, >>>> выполняемые после запроса, ну и по мелочи ещё. >>>> >>>> Пример кода: >>>> >>>> use strict; >>>> use warnings; >>>> use MVC::Neaf; >>>> >>>> MVC::Neaf->route( "/" => sub { >>>> my $req = shift; >>>> >>>> return { >>>> -template => \'Hello, [% name %]!', >>>> -type => 'text/plain', >>>> name => $req->param( name => qr/\w+/, "Stranger" ), >>>> }, >>>> }); >>>> >>>> На каждую фичу есть небольшой пример, они же используются как >>>> дополнительные смоук-тесты к 80% покрытию юнит-тестами. см. >>>> https://github.com/dallaylaen/perl-mvc-neaf/tree/master/example >>>> >>>> Собственно фреймворк: >>>> >>>> https://metacpan.org/pod/MVC::Neaf >>>> >>>> Буду рад обратной связи, критике, багрепортам и запросам новых фич (см. >>>> тж. https://github.com/dallaylaen/perl-mvc-neaf/blob/master/TODO ) >>>> >>>> С уважением, >>>> >>>> -- >>>> Konstantin S. Uvarin >>>> jabber: see <from> >>>> skype: kuvarin >>>> http://github.com/dallaylaen >>>> >>>> -- >>>> Moscow.pm mailing list >>>> [email protected] | http://moscow.pm.org >>>> >>>> >>> >> >> >> -- >> Konstantin S. Uvarin >> jabber: see <from> >> skype: kuvarin >> http://github.com/dallaylaen >> > >
-- Moscow.pm mailing list [email protected] | http://moscow.pm.org
