Mercurial > pub > Impl
diff Lib/IMPL/Web/Handler/ErrorHandler.pm @ 229:47f77e6409f7
heavily reworked the resource model of the web application:
*some ResourcesContraact functionality moved to Resource
+Added CustomResource
*Corrected action handlers
author | sergey |
---|---|
date | Sat, 29 Sep 2012 02:34:47 +0400 |
parents | d6e2ea24af08 |
children | 6d8092d8ce1b |
line wrap: on
line diff
--- a/Lib/IMPL/Web/Handler/ErrorHandler.pm Thu Sep 13 17:55:01 2012 +0400 +++ b/Lib/IMPL/Web/Handler/ErrorHandler.pm Sat Sep 29 02:34:47 2012 +0400 @@ -7,6 +7,8 @@ require => { WebException => 'IMPL::Web::Exception', ArgumentException => '-IMPL::InvalidArgumentException', + IOException => '-IMPL::IOException', + HttpResponse => 'IMPL::Web::HttpResponse' }, base => { 'IMPL::Object' => undef, @@ -42,9 +44,6 @@ }; if (my $err = $@) { - $action->ReinitResponse(); - $action->response->charset('utf-8'); - $action->response->contentType($this->contentType); my $vars = { error => $err @@ -52,17 +51,24 @@ my $code = 500; - $code = $err->code if eval { $err->isa(WebException) }; + if (eval { $err->isa(WebException) }) { + ($code) = ($err->status =~ m/^(\d+)/); + } - $action->response->status("$code"); - my $doc = $this->loader->document( $this->errors->{$code} || $this->fallback, $vars ); - my $hout = $action->response->streamBody; - print $hout $doc->Render($vars); + my $text = $doc->Render($vars); + + $result = HttpResponse->new( + status => $err->status, + type => $this->contentType, + charset => 'utf-8', + headers => $err->headers, + body => $text + ); } return $result; @@ -76,8 +82,36 @@ =head1 NAME +C<IMPL::Web::Handler::ErrorHandler> - обертка для обработки исключений. + =head1 SYNOPSIS +Используется в цеопчке обработчиков приложения. + +=begin code xml + + <handlers type="ARRAY"> + <item type="IMPL::Web::Handler::ErrorHandler"> + <contentType>text/html</contentType> + <loader refid="tt-loader"/> + <errors type="HASH"> + <error extname="500">errors/500</error> + <error extname="404">errors/404</error> + <error extname="403">errors/403</error> + </errors> + <fallback>errors/500</fallback> + </item> + </handlers> + +=end code xml + =head1 DESCRIPTION +Позволяет создать представление для ресурса в случае ошибки, для этого +используется соответствие представлений и кодов ошибок. + +В результате обработчик либо прозрачно передает результат вышестоящего +обработчика нижестоящему, либо создает C<IMPL::Web::HttpResponse> с +соответствующим статусом и содержанием. + =cut \ No newline at end of file