Implemented all changes requested by FuzeWorks\Application.
- Implemented a exception and error handler which other methods register to. These are executed in the order provided by the Priority class - Logger now uses the $isEnabled property to determine if it is enabled. $print_to_screen now has its own methods. - Plugins now use a 'plugin.pluginName.php' file by default -
This commit is contained in:
parent
e9eb858a2d
commit
68c2aaa210
|
@ -351,7 +351,13 @@ class Configurator
|
||||||
$container = Core::init();
|
$container = Core::init();
|
||||||
Logger::newLevel("Creating container...");
|
Logger::newLevel("Creating container...");
|
||||||
if ($debug == true)
|
if ($debug == true)
|
||||||
|
{
|
||||||
|
define('ENVIRONMENT', 'DEVELOPMENT');
|
||||||
Logger::enable();
|
Logger::enable();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
define('ENVIRONMENT', 'PRODUCTION');
|
||||||
|
|
||||||
|
|
||||||
// Load components
|
// Load components
|
||||||
foreach ($this->components as $componentSuperClass => $component)
|
foreach ($this->components as $componentSuperClass => $component)
|
||||||
|
|
|
@ -70,6 +70,20 @@ class Core
|
||||||
|
|
||||||
public static $logDir;
|
public static $logDir;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Array of exception handlers, sorted by priority
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected static $exceptionHandlers = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Array of error handlers, sorted by priority
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected static $errorHandlers = [];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initializes the core.
|
* Initializes the core.
|
||||||
*
|
*
|
||||||
|
@ -92,6 +106,8 @@ class Core
|
||||||
// Load basics
|
// Load basics
|
||||||
ignore_user_abort(true);
|
ignore_user_abort(true);
|
||||||
register_shutdown_function(array('\FuzeWorks\Core', 'shutdown'));
|
register_shutdown_function(array('\FuzeWorks\Core', 'shutdown'));
|
||||||
|
set_error_handler(array('\FuzeWorks\Core', 'errorHandler'), E_ALL);
|
||||||
|
set_exception_handler(array('\FuzeWorks\Core', 'exceptionHandler'));
|
||||||
|
|
||||||
// Return the Factory
|
// Return the Factory
|
||||||
return new Factory();
|
return new Factory();
|
||||||
|
@ -146,6 +162,93 @@ class Core
|
||||||
return (PHP_SAPI === 'cli' OR defined('STDIN'));
|
return (PHP_SAPI === 'cli' OR defined('STDIN'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function exceptionHandler()
|
||||||
|
{
|
||||||
|
for ($i = Priority::getHighestPriority(); $i <= Priority::getLowestPriority(); $i++)
|
||||||
|
{
|
||||||
|
if (!isset(self::$exceptionHandlers[$i]))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
foreach (self::$exceptionHandlers[$i] as $handler)
|
||||||
|
call_user_func_array($handler, func_get_args());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function errorHandler()
|
||||||
|
{
|
||||||
|
for ($i = Priority::getHighestPriority(); $i <= Priority::getLowestPriority(); $i++)
|
||||||
|
{
|
||||||
|
if (!isset(self::$errorHandlers[$i]))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
foreach (self::$errorHandlers[$i] as $handler)
|
||||||
|
call_user_func_array($handler, func_get_args());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add an exception handler to be called when an exception occurs
|
||||||
|
*
|
||||||
|
* @param callable $callback
|
||||||
|
* @param int $priority
|
||||||
|
*/
|
||||||
|
public static function addExceptionHandler(callable $callback, int $priority = Priority::NORMAL)
|
||||||
|
{
|
||||||
|
if (!isset(self::$exceptionHandlers[$priority]))
|
||||||
|
self::$exceptionHandlers[$priority] = [];
|
||||||
|
|
||||||
|
if (!in_array($callback, self::$exceptionHandlers[$priority]))
|
||||||
|
self::$exceptionHandlers[$priority][] = $callback;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove an exception handler from the list
|
||||||
|
*
|
||||||
|
* @param callable $callback
|
||||||
|
* @param int $priority
|
||||||
|
*/
|
||||||
|
public static function removeExceptionHandler(callable $callback, int $priority = Priority::NORMAL)
|
||||||
|
{
|
||||||
|
if (isset(self::$exceptionHandlers[$priority]) && in_array($callback, self::$exceptionHandlers[$priority]))
|
||||||
|
{
|
||||||
|
foreach (self::$exceptionHandlers[$priority] as $i => $_callback)
|
||||||
|
if ($callback == $_callback)
|
||||||
|
unset(self::$exceptionHandlers[$priority][$i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add an error handler to be called when an error occurs
|
||||||
|
*
|
||||||
|
* @param callable $callback
|
||||||
|
* @param int $priority
|
||||||
|
*/
|
||||||
|
public static function addErrorHandler(callable $callback, int $priority = Priority::NORMAL)
|
||||||
|
{
|
||||||
|
if (!isset(self::$errorHandlers[$priority]))
|
||||||
|
self::$errorHandlers[$priority] = [];
|
||||||
|
|
||||||
|
if (!in_array($callback, self::$errorHandlers[$priority]))
|
||||||
|
self::$errorHandlers[$priority][] = $callback;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove an error handler from the list
|
||||||
|
*
|
||||||
|
* @param callable $callback
|
||||||
|
* @param int $priority
|
||||||
|
*/
|
||||||
|
public static function removeErrorHandler(callable $callback, int $priority = Priority::NORMAL)
|
||||||
|
{
|
||||||
|
if (isset(self::$errorHandlers[$priority]) && in_array($callback, self::$errorHandlers[$priority]))
|
||||||
|
{
|
||||||
|
foreach (self::$errorHandlers[$priority] as $i => $_callback)
|
||||||
|
if ($callback == $_callback)
|
||||||
|
unset(self::$errorHandlers[$priority][$i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests for file writability
|
* Tests for file writability
|
||||||
*
|
*
|
||||||
|
@ -189,4 +292,14 @@ class Core
|
||||||
fclose($fp);
|
fclose($fp);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether the current environment is a production environment
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public static function isProduction(): bool
|
||||||
|
{
|
||||||
|
return (ENVIRONMENT === 'PRODUCTION');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,6 +66,13 @@ class Logger {
|
||||||
*/
|
*/
|
||||||
private static $print_to_screen = false;
|
private static $print_to_screen = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether the Logger has been enabled or not
|
||||||
|
*
|
||||||
|
* @var bool
|
||||||
|
*/
|
||||||
|
private static $isEnabled = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* whether to output the log of the last entire request to a file after FuzeWorks has run.
|
* whether to output the log of the last entire request to a file after FuzeWorks has run.
|
||||||
*
|
*
|
||||||
|
@ -137,7 +144,7 @@ class Logger {
|
||||||
*/
|
*/
|
||||||
public static function enable()
|
public static function enable()
|
||||||
{
|
{
|
||||||
self::$print_to_screen = true;
|
self::$isEnabled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -145,7 +152,7 @@ class Logger {
|
||||||
*/
|
*/
|
||||||
public static function disable()
|
public static function disable()
|
||||||
{
|
{
|
||||||
self::$print_to_screen = false;
|
self::$isEnabled = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -153,7 +160,24 @@ class Logger {
|
||||||
*/
|
*/
|
||||||
public static function isEnabled(): bool
|
public static function isEnabled(): bool
|
||||||
{
|
{
|
||||||
return self::$print_to_screen;
|
return self::$isEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enable outputting the debugger after the request has been processed
|
||||||
|
*/
|
||||||
|
public static function enableScreenLog()
|
||||||
|
{
|
||||||
|
if (!Core::isProduction())
|
||||||
|
self::$print_to_screen = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disable outputting the debugger after the request has been processed
|
||||||
|
*/
|
||||||
|
public static function disableScreenLog()
|
||||||
|
{
|
||||||
|
self::$print_to_screen = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -164,8 +188,8 @@ class Logger {
|
||||||
*/
|
*/
|
||||||
public static function enableHandlers()
|
public static function enableHandlers()
|
||||||
{
|
{
|
||||||
set_error_handler(array('\FuzeWorks\Logger', 'errorHandler'), E_ALL);
|
Core::addErrorHandler(['\FuzeWorks\Logger', 'errorHandler'], Priority::NORMAL);
|
||||||
set_exception_handler(array('\FuzeWorks\Logger', 'exceptionHandler'));
|
Core::addExceptionHandler(['\FuzeWorks\Logger', 'exceptionHandler'], Priority::NORMAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -176,8 +200,8 @@ class Logger {
|
||||||
*/
|
*/
|
||||||
public static function disableHandlers()
|
public static function disableHandlers()
|
||||||
{
|
{
|
||||||
restore_error_handler();
|
Core::removeErrorHandler(['\FuzeWorks\Logger', 'errorHandler'], Priority::NORMAL);
|
||||||
restore_exception_handler();
|
Core::removeExceptionHandler(['\FuzeWorks\Logger', 'exceptionHandler'], Priority::NORMAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -266,7 +266,7 @@ class Plugins
|
||||||
// @todo Find a more reliable method for determining header directory
|
// @todo Find a more reliable method for determining header directory
|
||||||
$headerReflection = new ReflectionClass( get_class($header) );
|
$headerReflection = new ReflectionClass( get_class($header) );
|
||||||
$directory = dirname($headerReflection->getFileName());
|
$directory = dirname($headerReflection->getFileName());
|
||||||
$classFile = (isset($header->classFile) ? $directory.DS.$header->classFile : $directory.DS.$pluginName.".php");
|
$classFile = (isset($header->classFile) ? $directory.DS.$header->classFile : $directory.DS.'plugin.'.strtolower($pluginName).".php");
|
||||||
$className = (isset($header->className) ? $header->className : '\Application\Plugin\\'.$pluginName);
|
$className = (isset($header->className) ? $header->className : '\Application\Plugin\\'.$pluginName);
|
||||||
|
|
||||||
// Try to access the file
|
// Try to access the file
|
||||||
|
|
Loading…
Reference in New Issue