Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

feature #10353 [Debug] ExceptionHandlerInterface to allow third party…

… exception handlers to handle fatal errors caught by ErrorHandler (FineWolf)

This PR was merged into the 2.5-dev branch.

Discussion
----------

[Debug] ExceptionHandlerInterface to allow third party exception handlers to handle fatal errors caught by ErrorHandler

| Q             | A
| ------------- | ---
| Bug fix?      | yes (other project)
| New feature?  | yes
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets |
| Related tickets | schmittjoh/JMSDebuggingBundle#68
| License       | MIT
| Doc PR        |

The current `ErrorHandler` is extremely strict on how it selects whether to run an `ExceptionHandler` when an `E_FATAL` occurs.

This modification allows any class that implements `ExceptionHandlerInterface` to handle a `FatalErrorException` created by the `ErrorHandler`.

Commits
-------

15d063b Create ExceptionHandlerInterface to allow third party exception handlers' to handle fatal errors
  • Loading branch information...
commit 681f14bce1812d43551b2f8ad73362e31874d9ce 2 parents 7baeaa2 + 15d063b
@fabpot fabpot authored
View
6 src/Symfony/Component/Debug/ErrorHandler.php
@@ -155,7 +155,7 @@ function ($row) {
$exceptionHandler = set_exception_handler('var_dump');
restore_exception_handler();
- if (is_array($exceptionHandler) && $exceptionHandler[0] instanceof ExceptionHandler) {
+ if (is_array($exceptionHandler) && $exceptionHandler[0] instanceof ExceptionHandlerInterface) {
if (self::$stackedErrorLevels) {
self::$stackedErrors[] = func_get_args();
@@ -263,7 +263,7 @@ public function handleFatal()
$exceptionHandler = set_exception_handler('var_dump');
restore_exception_handler();
- if (is_array($exceptionHandler) && $exceptionHandler[0] instanceof ExceptionHandler) {
+ if (is_array($exceptionHandler) && $exceptionHandler[0] instanceof ExceptionHandlerInterface) {
$this->handleFatalError($exceptionHandler[0], $error);
}
}
@@ -284,7 +284,7 @@ protected function getFatalErrorHandlers()
);
}
- private function handleFatalError(ExceptionHandler $exceptionHandler, array $error)
+ private function handleFatalError(ExceptionHandlerInterface $exceptionHandler, array $error)
{
$level = isset($this->levels[$error['type']]) ? $this->levels[$error['type']] : $error['type'];
$message = sprintf('%s: %s in %s line %d', $level, $error['message'], $error['file'], $error['line']);
View
6 src/Symfony/Component/Debug/ExceptionHandler.php
@@ -29,7 +29,7 @@
*
* @author Fabien Potencier <fabien@symfony.com>
*/
-class ExceptionHandler
+class ExceptionHandler implements ExceptionHandlerInterface
{
private $debug;
private $charset;
@@ -57,14 +57,14 @@ public static function register($debug = true)
}
/**
+ * {@inheritDoc}
+ *
* Sends a response for the given Exception.
*
* If you have the Symfony HttpFoundation component installed,
* this method will use it to create and send the response. If not,
* it will fallback to plain PHP functions.
*
- * @param \Exception $exception An \Exception instance
- *
* @see sendPhpResponse
* @see createResponse
*/
View
27 src/Symfony/Component/Debug/ExceptionHandlerInterface.php
@@ -0,0 +1,27 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Debug;
+
+/**
+ * An ExceptionHandler does something useful with an exception.
+ *
+ * @author Andrew Moore <me@andrewmoore.ca>
+ */
+interface ExceptionHandlerInterface
+{
+ /**
+ * Handles an exception.
+ *
+ * @param \Exception $exception An \Exception instance
+ */
+ public function handle(\Exception $exception);
+}
Please sign in to comment.
Something went wrong with that request. Please try again.