From cc01c906ba63b3797bf2b9ef92a6854fe2ddbefb Mon Sep 17 00:00:00 2001 From: Igor Scheller Date: Tue, 29 Aug 2017 16:21:25 +0200 Subject: #336: Integration of symfony/http-foundation request --- src/Exceptions/Handler.php | 56 +++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 50 insertions(+), 6 deletions(-) (limited to 'src/Exceptions') diff --git a/src/Exceptions/Handler.php b/src/Exceptions/Handler.php index 0532a7d8..6e5b4749 100644 --- a/src/Exceptions/Handler.php +++ b/src/Exceptions/Handler.php @@ -34,7 +34,9 @@ class Handler */ public function errorHandler($number, $string, $file, $line, $context) { - $this->handle('error', $number, $string, $file, $line, $context); + $trace = array_reverse(debug_backtrace()); + + $this->handle('error', $number, $string, $file, $line, $context, $trace); } /** @@ -59,8 +61,9 @@ class Handler * @param string $file * @param int $line * @param array $context + * @param array $trace */ - protected function handle($type, $number, $string, $file, $line, $context = []) + protected function handle($type, $number, $string, $file, $line, $context = [], $trace = []) { error_log(sprintf('%s: Number: %s, String: %s, File: %s:%u, Context: %s', $type, @@ -71,13 +74,16 @@ class Handler json_encode($context) )); + $file = $this->stripBasePath($file); + if ($this->environment == self::ENV_DEVELOPMENT) { - echo '
';
+            echo '
';
             echo sprintf('%s: (%s)' . PHP_EOL, ucfirst($type), $number);
             var_export([
-                'string'  => $string,
-                'file'    => $file . ':' . $line,
-                'context' => ($this->environment == self::ENV_DEVELOPMENT ? $context : null),
+                'string'     => $string,
+                'file'       => $file . ':' . $line,
+                'context'    => $context,
+                'stacktrace' => $this->formatStackTrace($trace),
             ]);
             echo '
'; die(); @@ -87,6 +93,44 @@ class Handler die(); } + /** + * @param array $stackTrace + * @return array + */ + protected function formatStackTrace($stackTrace) + { + $return = []; + + foreach ($stackTrace as $trace) { + $path = ''; + $line = ''; + + if (isset($trace['file']) && isset($trace['line'])) { + $path = $this->stripBasePath($trace['file']); + $line = $trace['line']; + } + + $functionName = $trace['function']; + + $return[] = [ + 'file' => $path . ':' . $line, + $functionName => $trace['args'], + ]; + } + + return $return; + } + + /** + * @param string $path + * @return string + */ + protected function stripBasePath($path) + { + $basePath = realpath(__DIR__ . '/../..') . '/'; + return str_replace($basePath, '', $path); + } + /** * @param string $environment */ -- cgit v1.2.3-54-g00ecf