Added exception handler
parent
8254a79c58
commit
f7c09cb7ff
@ -0,0 +1,97 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Engelsystem\Exceptions;
|
||||||
|
|
||||||
|
use Exception;
|
||||||
|
|
||||||
|
class Handler
|
||||||
|
{
|
||||||
|
/** @var string */
|
||||||
|
protected $environment;
|
||||||
|
|
||||||
|
const ENV_PRODUCTION = 'prod';
|
||||||
|
const ENV_DEVELOPMENT = 'dev';
|
||||||
|
const ENV_DEBUGGING = 'debug';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handler constructor.
|
||||||
|
*
|
||||||
|
* @param string $environment production|development
|
||||||
|
*/
|
||||||
|
public function __construct($environment = self::ENV_PRODUCTION)
|
||||||
|
{
|
||||||
|
$this->environment = $environment;
|
||||||
|
|
||||||
|
set_error_handler([$this, 'errorHandler']);
|
||||||
|
set_exception_handler([$this, 'exceptionHandler']);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param int $number
|
||||||
|
* @param string $string
|
||||||
|
* @param string $file
|
||||||
|
* @param int $line
|
||||||
|
* @param array $context
|
||||||
|
*/
|
||||||
|
public function errorHandler($number, $string, $file, $line, $context)
|
||||||
|
{
|
||||||
|
$this->handle('error', $number, $string, $file, $line, $context);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Exception $e
|
||||||
|
*/
|
||||||
|
public function exceptionHandler(Exception $e)
|
||||||
|
{
|
||||||
|
$this->handle(
|
||||||
|
'exception',
|
||||||
|
$e->getCode(),
|
||||||
|
get_class($e) . ': ' . $e->getMessage(),
|
||||||
|
$e->getFile(),
|
||||||
|
$e->getLine()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $type
|
||||||
|
* @param int $number
|
||||||
|
* @param string $string
|
||||||
|
* @param string $file
|
||||||
|
* @param int $line
|
||||||
|
* @param array $context
|
||||||
|
*/
|
||||||
|
protected function handle($type, $number, $string, $file, $line, $context = [])
|
||||||
|
{
|
||||||
|
error_log(sprintf('%s: Number: %s, String: %s, File: %s:%u, Context: %s',
|
||||||
|
$type,
|
||||||
|
$number,
|
||||||
|
$string,
|
||||||
|
$file,
|
||||||
|
$line,
|
||||||
|
json_encode($context)
|
||||||
|
));
|
||||||
|
|
||||||
|
if ($this->environment == self::ENV_DEVELOPMENT || $this->environment == self::ENV_DEBUGGING) {
|
||||||
|
echo '<pre style="background-color:#333;color:#ccc;z-index:1000;position:fixed;bottom:1em;padding:1em;width:97%;overflow-y:auto;">';
|
||||||
|
echo sprintf('%s: (%s)' . PHP_EOL, ucfirst($type), $number);
|
||||||
|
var_export([
|
||||||
|
'string' => $string,
|
||||||
|
'file' => $file . ':' . $line,
|
||||||
|
'context' => ($this->environment == self::ENV_DEBUGGING ? $context : null),
|
||||||
|
]);
|
||||||
|
echo '</pre>';
|
||||||
|
die();
|
||||||
|
}
|
||||||
|
|
||||||
|
echo 'An <del>un</del>expected error occurred, a team of untrained monkeys has been dispatched to deal with it.';
|
||||||
|
die();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $environment
|
||||||
|
*/
|
||||||
|
public function setEnvironment($environment)
|
||||||
|
{
|
||||||
|
$this->environment = $environment;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue