Browse Source

Fix exceptions being thrown in beforeFilter breaking error pages.

If an exception was raised in the AppController::beforeFilter(),
requests for content-type responses would render as HTML. Extracting the
startupProcess() allows us to keep a reference to the error controller,
which can be used to force startup RequestHandlerComponent if its
enabled.

Fixes #3389
mark_story 13 years ago
parent
commit
3083b01f7d

+ 0 - 2
lib/Cake/Controller/CakeErrorController.php

@@ -66,8 +66,6 @@ class CakeErrorController extends AppController {
 		if ($this->Components->enabled('Security')) {
 			$this->Components->disable('Security');
 		}
-		$this->startupProcess();
-
 		$this->_set(array('cacheAction' => false, 'viewPath' => 'Errors'));
 	}
 

+ 4 - 0
lib/Cake/Error/ExceptionRenderer.php

@@ -150,7 +150,11 @@ class ExceptionRenderer {
 		$response = new CakeResponse(array('charset' => Configure::read('App.encoding')));
 		try {
 			$controller = new CakeErrorController($request, $response);
+			$controller->startupProcess();
 		} catch (Exception $e) {
+			if (!empty($controller) && $controller->Components->enabled('RequestHandler')) {
+				$controller->RequestHandler->startup($controller);
+			}
 		}
 		if (empty($controller)) {
 			$controller = new Controller($request, $response);