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