Commit 12e5f62c by Carsten Brandt

Errorhandler, manually load classes

load ErrorException manually because autoloading them will not work when error occurs while autoloading a class
parent 42063744
...@@ -347,8 +347,7 @@ abstract class Application extends Module ...@@ -347,8 +347,7 @@ abstract class Application extends Module
/** /**
* Handles uncaught PHP exceptions. * Handles uncaught PHP exceptions.
* *
* This method is implemented as a PHP exception handler. It requires * This method is implemented as a PHP exception handler.
* that constant YII_ENABLE_ERROR_HANDLER be defined true.
* *
* @param \Exception $exception the exception that is not caught * @param \Exception $exception the exception that is not caught
*/ */
...@@ -394,6 +393,14 @@ abstract class Application extends Module ...@@ -394,6 +393,14 @@ abstract class Application extends Module
public function handleError($code, $message, $file, $line) public function handleError($code, $message, $file, $line)
{ {
if (error_reporting() !== 0) { if (error_reporting() !== 0) {
// load ErrorException manually here because autoloading them will not work
// when error occurs while autoloading a class
if (!class_exists('\\yii\\base\\Exception', false)) {
require_once(__DIR__ . '/Exception.php');
}
if (!class_exists('\\yii\\base\\ErrorException', false)) {
require_once(__DIR__ . '/ErrorException.php');
}
$exception = new ErrorException($message, $code, $code, $file, $line); $exception = new ErrorException($message, $code, $code, $file, $line);
// in case error appeared in __toString method we can't throw any exception // in case error appeared in __toString method we can't throw any exception
...@@ -402,6 +409,7 @@ abstract class Application extends Module ...@@ -402,6 +409,7 @@ abstract class Application extends Module
foreach ($trace as $frame) { foreach ($trace as $frame) {
if ($frame['function'] == '__toString') { if ($frame['function'] == '__toString') {
$this->handleException($exception); $this->handleException($exception);
return;
} }
} }
...@@ -418,6 +426,14 @@ abstract class Application extends Module ...@@ -418,6 +426,14 @@ abstract class Application extends Module
if (ErrorException::isFatalError($error)) { if (ErrorException::isFatalError($error)) {
unset($this->_memoryReserve); unset($this->_memoryReserve);
// load ErrorException manually here because autoloading them will not work
// when error occurs while autoloading a class
if (!class_exists('\\yii\\base\\Exception', false)) {
require_once(__DIR__ . '/Exception.php');
}
if (!class_exists('\\yii\\base\\ErrorException', false)) {
require_once(__DIR__ . '/ErrorException.php');
}
$exception = new ErrorException($error['message'], $error['type'], $error['type'], $error['file'], $error['line']); $exception = new ErrorException($error['message'], $error['type'], $error['type'], $error['file'], $error['line']);
// use error_log because it's too late to use Yii log // use error_log because it's too late to use Yii log
error_log($exception); error_log($exception);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment