예제 #1
0
 /**
  * Bootstraps the backend. This function registers an auto loader, parses the configuration
  * file, configures error handling and logging and finally hands over control to the
  * Router.
  * Both the configuration and the logger instance are stored in the 
  * Dashboard\Backend\Application\LifeCycle\RequestScope, with the respective keys *config* 
  * and *logger*.
  *
  * @param \stdClass $config The configuration object.
  * @return void
  */
 public function bootstrap(\stdClass $config)
 {
     \spl_autoload_register('Dashboard\\Backend\\Application\\Control\\Autoloader::autoload', true, true);
     $this->configureErrorHandling();
     $config = new Config($config);
     $sessionService = new Domain\Session\SessionService();
     $session = $sessionService->createSession($config->get('session'));
     $session->start();
     $psrService = new Domain\Psr\PsrService();
     RequestScope::instance()->set('config', $config);
     RequestScope::instance()->set('logger', $psrService->createLogger($config));
     RequestScope::instance()->set('session', $session);
 }
 public static final function handleError(int $errno, string $errstr, string $errfile = '', int $errline = 0, array $errcontext = array()) : bool
 {
     $psrService = new Domain\Psr\PsrService();
     try {
         $logger = null;
         $scope = RequestScope::instance();
         $message = $errstr . ' in file ' . $errfile . ' at line ' . $errline;
         if ($scope->isDefined('logger')) {
             $logger = $scope->get('logger');
         } else {
             // To be able to handle errors before the Logger has been created,
             // we must create the Logger here. This happens for instance when
             // the Backend::bootstrap() method has not yet finished.
             // Errors can also occur before the configuration has been parsed.
             // If that is the case, use a fake logger which just prints
             // to stderr.
             if ($scope->isDefined('config')) {
                 $logger = $psrService->createLogger(RequestScope::instance()->get('config'));
             } else {
                 $logger = new PreBootstrapLogger();
             }
         }
         switch ($errno) {
             case E_ERROR:
                 $logger->emergency($message, $errcontext);
                 break;
             case E_WARNING:
                 $logger->warning($message, $errcontext);
                 break;
             case E_NOTICE:
                 $logger->notice($message, $errcontext);
                 break;
             case E_CORE_ERROR:
                 $logger->emergency($message, $errcontext);
                 break;
             case E_CORE_WARNING:
                 $logger->warning($message, $errcontext);
                 break;
             case E_COMPILE_ERROR:
                 $logger->emergency($message, $errcontext);
                 break;
             case E_COMPILE_WARNING:
                 $logger->warning($message, $errcontext);
                 break;
             case E_USER_ERROR:
                 $logger->emergency($message, $errcontext);
                 break;
             case E_USER_WARNING:
                 $logger->warning($message, $errcontext);
                 break;
             case E_USER_NOTICE:
                 $logger->notice($message, $errcontext);
                 break;
             case E_STRICT:
                 $logger->debug($message, $errcontext);
                 break;
             case E_RECOVERABLE_ERROR:
                 $logger->critical($message, $errcontext);
                 break;
             case E_DEPRECATED:
                 $logger->notice($message, $errcontext);
                 break;
             case E_USER_DEPRECATED:
                 $logger->notice($message, $errcontext);
                 break;
             default:
                 $logger->info($message, $errcontext);
                 break;
         }
     } catch (\Throwable $ex) {
         $fd = @\fopen('php://stderr', 'w');
         @\fwrite($fd, "Error '{$errstr}' in file '{$errfile}' at line '{$errline}'\n");
         @\fclose($fd);
     }
     // Stop handling errors after this.
     return true;
 }