mirror of
https://github.com/kamilwylegala/cakephp2-php8.git
synced 2024-11-15 03:18:26 +00:00
Allowing plugins to offer ExceptionRenderer classes
This commit is contained in:
parent
24fbaafe01
commit
dfb669ab8e
2 changed files with 27 additions and 7 deletions
|
@ -54,13 +54,13 @@ App::uses('AppController', 'Controller');
|
|||
*
|
||||
* This controller method is called instead of the default exception rendering. It receives the
|
||||
* thrown exception as its only argument. You should implement your error handling in that method.
|
||||
* Using AppController::appError(), will superseed any configuration for Exception.renderer.
|
||||
* Using AppController::appError(), will supersede any configuration for Exception.renderer.
|
||||
*
|
||||
* #### Using a custom renderer with `Exception.renderer`
|
||||
*
|
||||
* If you don't want to take control of the exception handling, but want to change how exceptions are
|
||||
* rendered you can use `Exception.renderer` to choose a class to render exception pages. By default
|
||||
* `ExceptionRenderer` is used. Your custom exception renderer class should be placed in app/libs.
|
||||
* `ExceptionRenderer` is used. Your custom exception renderer class should be placed in app/Lib/Error.
|
||||
*
|
||||
* Your custom renderer should expect an exception in its constructor, and implement a render method.
|
||||
* Failing to do so will cause additional errors.
|
||||
|
@ -116,10 +116,12 @@ class ErrorHandler {
|
|||
);
|
||||
CakeLog::write(LOG_ERR, $message);
|
||||
}
|
||||
if ($config['renderer'] !== 'ExceptionRenderer') {
|
||||
App::uses($config['renderer'], 'Error');
|
||||
$renderer = $config['renderer'];
|
||||
if ($renderer !== 'ExceptionRenderer') {
|
||||
list($plugin, $renderer) = pluginSplit($renderer, true);
|
||||
App::uses($renderer, $plugin . 'Error');
|
||||
}
|
||||
$error = new $config['renderer']($exception);
|
||||
$error = new $renderer($exception);
|
||||
$error->render();
|
||||
}
|
||||
|
||||
|
|
|
@ -37,8 +37,7 @@ class ErrorHandlerTest extends CakeTestCase {
|
|||
function setUp() {
|
||||
App::build(array(
|
||||
'View' => array(
|
||||
LIBS . 'tests' . DS . 'test_app' . DS . 'views'. DS,
|
||||
LIBS . 'libs' . DS . 'view' . DS
|
||||
LIBS . 'tests' . DS . 'test_app' . DS . 'View'. DS
|
||||
)
|
||||
), true);
|
||||
Router::reload();
|
||||
|
@ -223,4 +222,23 @@ class ErrorHandlerTest extends CakeTestCase {
|
|||
$this->assertPattern('/\#0.*ErrorHandlerTest->testHandleExceptionLog/', $log[1], 'Stack trace missing.');
|
||||
}
|
||||
|
||||
/**
|
||||
* tests it is possible to load a plugin exception renderer
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testLoadPluginHanlder() {
|
||||
App::build(array(
|
||||
'plugins' => array(
|
||||
LIBS . 'tests' . DS . 'test_app' . DS . 'plugins' . DS
|
||||
)
|
||||
), true);
|
||||
Configure::write('Exception.renderer', 'TestPlugin.TestPluginExceptionRenderer');
|
||||
$error = new NotFoundException('Kaboom!');
|
||||
ob_start();
|
||||
ErrorHandler::handleException($error);
|
||||
$result = ob_get_clean();
|
||||
$this->assertEquals($result, 'Rendered by test plugin');
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue