Mercurial > pub > Impl
diff Lib/IMPL/Web/Application/Action.pm @ 206:c8fe3f84feba
+IMPL::Web::Handlers::ViewSelector
+IMPL::Web::Handlers::ErrorHandler
*IMPL::Web::Handlers::RestController moved types mappings to ViewSelector
author | sergey |
---|---|
date | Thu, 03 May 2012 16:48:39 +0400 |
parents | 4d0e1962161c |
children | 47f77e6409f7 |
line wrap: on
line diff
--- a/Lib/IMPL/Web/Application/Action.pm Thu May 03 01:00:02 2012 +0400 +++ b/Lib/IMPL/Web/Application/Action.pm Thu May 03 16:48:39 2012 +0400 @@ -6,6 +6,7 @@ __PACKAGE__->PassThroughArgs; use IMPL::Class::Property; +use Carp qw(carp); BEGIN { public property application => prop_get | owner_set; @@ -46,6 +47,8 @@ sub ChainHandler { my ($this,$handler) = @_; + carp "deprecated, use Application->handlers instead"; + my $delegateNext = $this->_entryPoint(); if (ref $handler eq 'CODE') { @@ -125,103 +128,7 @@ =head1 DESCRIPTION C<[Infrastructure]> - -Определяет порядок выполнения запроса. Запрос выполняется последовательным вызовом -цепочки обработчиков, при этом обработчики сами вызывают следующие. -Обработчики выполняются в порядке, обратном их добавлению. - -Типичная цепочка может быть такой, в порядке добавления - -=begin code - -IMPL::Web::QueryHandler::SecCallToMethod -IMPL::Web::QueryHandler::AuthenticateCookie -IMPL::Web::QueryHandler::PageFormat - -=end code - -что приведет к следующей последовательности - -=begin code - -# the application creates a new Action object - -my $action = $application->actionFactory->new( - action => $application, # the application passes self - query => $query # current CGI query -); - -# forms query handlers stack - -$action->ChainHandler($_) foreach qw ( - IMPL::Web::QueryHandler::SecCallToMethod - IMPL::Web::QueryHandler::AuthenticateCookie - IMPL::Web::QueryHandler::PageFormat -); - -# and finally invokes the action - -$action->Invoke() { - - # some internals - - IMPL::Web::QueryHandler::PageFormat->Invoke($action,$nextHandlerIsAuthHandler) { - - #some internals - - my $result = $nextHandlerIsAuthHandler() { - - # some internals - - IMPL::Web::QueryHandler::AuthenticateCookie->Invoke($action,$nextHandlerIsSecCall) { - - # some internals - # do auth and generate security $context - - # impersonate $context and call the next handler - return $context->Impersonate($nextHandlerIsSecCall) { - - # some internals - - IMPL::Web::QueryHandler::SecCallToMethod->Invoke($action,undef) { - - # next handler isn't present as it is the last hanler - - # some internals - # calculate the $method and the $target from CGI request - - IMPL::Security->AccessCheck($target,$method); - return $target->$method(); - - } - - } - - } - } - - # some intenals - # formatted output to $action->response->streamBody - } -} - -=end code - -или как альтернатива может быть еще - -=begin code - -IMPL::Web::QueryHandler::SecCallToMethod -IMPL::Web::QueryHandler::AuthenticateCookie -IMPL::Web::QueryHandler::Filter->new( target => IMPL::Transform::ObjectToJSON->new() , method => 'Transform') -IMLP::Web::QueryHandler::JSONFormat - - -=end code - -В данной цепочке также происходит вызов метода, но его результат потом преобразуется -в простые структуры и передается JSON преобразователю. Таким образом модулю логики -не требуется знать о выходном формате, всю работу проделают дополнительные фильтры. +Свзяывет CGI запрос, приложение, орабатывающее его и ответ, который будет отправлен клиенту. =head1 MEMBERS @@ -264,37 +171,4 @@ что эта операция не возможна, если ответ частично или полностью отправлен клиенту. Тогда возникает исключение C<IMPL::InvalidOperationException>. -=item C< ChainHandler($handler) > - -Добавляет новый обработчик в цепочку. Выполнение цепочки начинается с конца, -тоесть последний добавленный будет выполнен первым. - -=back - -=head1 HANDLERS - -=head2 subroutines - -=over - -=item CODE ref - -Ссылка на процедуру может являться обработчиком, при этом функция будет вызвана с -двумя параметрами: ссылкой на action объект, и точкой входа следующего обработчика. - -=item Method Name - -Имя метода, передается в виде строки. У текущего объекта action ищется метод с -указанным именем, после чего используется ссылка на этот метод для вызова с двумя -параметрами: ссылкой на action объект, и точкой входа следующего обработчика. - -Получается вызов идентичный следующему C<< $action->MethodName($nextHandler) >>; - -=back - -=head2 C< IMPL::Web::QueryHandler > - -Любой объект наследованный от C< IMPL::Web::QueryHandler > может быть -использован в качестве обработчика запроса - =cut