/** * 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 function route(Request $request) : Response { $module = $request->getParameter('module'); $action = $request->getParameter('action'); $value = $request->getParameter('value'); $moduleConfig = null; $globalConfig = RequestScope::instance()->get('config'); if ($globalConfig->get('modules')->isDefined($module)) { $moduleConfig = $globalConfig->get('modules')->get($module); } $serviceClass = 'Dashboard\\Backend\\Application\\' . \ucfirst($module) . '\\Service'; $filteredParameters = $this->filterParameters($request->getParameters(), array('module', 'action')); $serviceInstance = new $serviceClass($moduleConfig); $actionResult = $serviceInstance->{$action}($filteredParameters); $response = new Response($actionResult); return $response; }
public function __construct() { $this->config = RequestScope::instance()->get('config')->get('db'); }
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; }