1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
|
<?php
/**
* Slim Framework (https://slimframework.com)
*
* @license https://github.com/slimphp/Slim/blob/3.x/LICENSE.md (MIT License)
*/
namespace Slim\Handlers;
use Exception;
use Throwable;
abstract class AbstractError extends AbstractHandler
{
/**
* @var bool
*/
protected $displayErrorDetails;
/**
* @param bool $displayErrorDetails Set to true to display full details
*/
public function __construct($displayErrorDetails = false)
{
$this->displayErrorDetails = (bool) $displayErrorDetails;
}
/**
* Write to the error log if displayErrorDetails is false
*
* @param Exception|Throwable $throwable
*
* @return void
*/
protected function writeToErrorLog($throwable)
{
if ($this->displayErrorDetails) {
return;
}
$message = 'Slim Application Error:' . PHP_EOL;
$message .= $this->renderThrowableAsText($throwable);
while ($throwable = $throwable->getPrevious()) {
$message .= PHP_EOL . 'Previous error:' . PHP_EOL;
$message .= $this->renderThrowableAsText($throwable);
}
$message .= PHP_EOL . 'View in rendered output by enabling the "displayErrorDetails" setting.' . PHP_EOL;
$this->logError($message);
}
/**
* Render error as Text.
*
* @param Exception|Throwable $throwable
*
* @return string
*/
protected function renderThrowableAsText($throwable)
{
$text = sprintf('Type: %s' . PHP_EOL, get_class($throwable));
if ($code = $throwable->getCode()) {
$text .= sprintf('Code: %s' . PHP_EOL, $code);
}
if ($message = $throwable->getMessage()) {
$text .= sprintf('Message: %s' . PHP_EOL, htmlentities($message));
}
if ($file = $throwable->getFile()) {
$text .= sprintf('File: %s' . PHP_EOL, $file);
}
if ($line = $throwable->getLine()) {
$text .= sprintf('Line: %s' . PHP_EOL, $line);
}
if ($trace = $throwable->getTraceAsString()) {
$text .= sprintf('Trace: %s', $trace);
}
return $text;
}
/**
* Wraps the error_log function so that this can be easily tested
*
* @param string $message
*/
protected function logError($message)
{
error_log($message);
}
}
|