function Error::decodeException
Same name in other branches
- 9 core/lib/Drupal/Core/Utility/Error.php \Drupal\Core\Utility\Error::decodeException()
- 8.9.x core/lib/Drupal/Core/Utility/Error.php \Drupal\Core\Utility\Error::decodeException()
- 11.x core/lib/Drupal/Core/Utility/Error.php \Drupal\Core\Utility\Error::decodeException()
Decodes an exception and retrieves the correct caller.
Parameters
\Throwable $exception: The exception object that was thrown.
Return value
array An error in the format expected by _drupal_log_error().
14 calls to Error::decodeException()
- AnnounceFetcher::fetch in core/
modules/ announcements_feed/ src/ AnnounceFetcher.php - Fetches the feed either from a local cache or fresh remotely.
- ConfigEntityUpdater::update in core/
lib/ Drupal/ Core/ Config/ Entity/ ConfigEntityUpdater.php - Updates configuration entities as part of a Drupal update.
- DefaultExceptionHtmlSubscriber::makeSubrequest in core/
lib/ Drupal/ Core/ EventSubscriber/ DefaultExceptionHtmlSubscriber.php - Makes a subrequest to retrieve the default error page.
- Error::logException in core/
lib/ Drupal/ Core/ Utility/ Error.php - Log a formatted exception message to the provided logger.
- Error::renderExceptionSafe in core/
lib/ Drupal/ Core/ Utility/ Error.php - Renders an exception error message without further exceptions.
File
-
core/
lib/ Drupal/ Core/ Utility/ Error.php, line 46
Class
- Error
- Drupal error utility class.
Namespace
Drupal\Core\UtilityCode
public static function decodeException(\Throwable $exception) : array {
$message = $exception->getMessage();
$backtrace = $exception->getTrace();
// Add the line throwing the exception to the backtrace.
array_unshift($backtrace, [
'line' => $exception->getLine(),
'file' => $exception->getFile(),
]);
// For PDOException errors, we try to return the initial caller,
// skipping internal functions of the database layer.
if ($exception instanceof \PDOException || $exception instanceof DatabaseExceptionWrapper) {
$driver_namespace = Database::getConnectionInfo()['default']['namespace'];
$backtrace = Connection::removeDatabaseEntriesFromDebugBacktrace($backtrace, $driver_namespace);
if (isset($exception->query_string, $exception->args)) {
$message .= ": " . $exception->query_string . "; " . print_r($exception->args, TRUE);
}
}
$caller = static::getLastCaller($backtrace);
return [
'%type' => get_class($exception),
// The standard PHP exception handler considers that the exception message
// is plain-text. We mimic this behavior here.
'@message' => $message,
'%function' => $caller['function'],
'%file' => $caller['file'],
'%line' => $caller['line'],
'severity_level' => static::ERROR,
'backtrace' => $backtrace,
'@backtrace_string' => $exception->getTraceAsString(),
'exception' => $exception,
];
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.