From 34e1afd8efa3a02ba637ef53a952a0fc1b56f60c Mon Sep 17 00:00:00 2001 From: mark_story Date: Tue, 20 Mar 2012 20:54:41 -0400 Subject: [PATCH] Add support for custom console error handling Both errors and exceptions can be configured for the console at the application layer now. Fixes #2696 --- lib/Cake/Console/ShellDispatcher.php | 30 ++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/lib/Cake/Console/ShellDispatcher.php b/lib/Cake/Console/ShellDispatcher.php index 5f2f5a6aa..5bb21ef12 100644 --- a/lib/Cake/Console/ShellDispatcher.php +++ b/lib/Cake/Console/ShellDispatcher.php @@ -134,10 +134,8 @@ class ShellDispatcher { include_once CAKE_CORE_INCLUDE_PATH . DS . 'Cake' . DS . 'Console' . DS . 'Templates' . DS . 'skel' . DS . 'Config' . DS . 'core.php'; App::build(); } - require_once CAKE . 'Console' . DS . 'ConsoleErrorHandler.php'; - $ErrorHandler = new ConsoleErrorHandler(); - set_exception_handler(array($ErrorHandler, 'handleException')); - set_error_handler(array($ErrorHandler, 'handleError'), Configure::read('Error.level')); + + $this->setErrorHandlers(); if (!defined('FULL_BASE_URL')) { define('FULL_BASE_URL', 'http://localhost'); @@ -146,6 +144,30 @@ class ShellDispatcher { return true; } +/** + * Set the error/exception handlers for the console + * based on the `Error.consoleHandler`, and `Exception.consoleHandler` values + * if they are set. If they are not set, the default ConsoleErrorHandler will be + * used. + * + * @return void + */ + public function setErrorHandlers() { + App::uses('ConsoleErrorHandler', 'Console'); + $error = Configure::read('Error'); + $exception = Configure::read('Exception'); + + $errorHandler = new ConsoleErrorHandler(); + if (empty($error['consoleHandler'])) { + $error['consoleHandler'] = array($errorHandler, 'handleError'); + } + if (empty($exception['consoleHandler'])) { + $exception['consoleHandler'] = array($errorHandler, 'handleException'); + } + set_exception_handler($exception['consoleHandler']); + set_error_handler($error['consoleHandler'], Configure::read('Error.level')); + } + /** * Dispatches a CLI request *