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