public static function index(Request $request, TestInjection $ti)
 {
     Logger::log(Logger::INFO, 'example log message');
     return 'path: ' . $request->getUri()->getPath() . ', random injection data: ' . $ti->getSomeData() . ', next up: ' . Router::link('example.test2', ['user' => new User(1)])->setQueryParameters(['foo' => 'b a r'])->getAbsolute();
 }
Example #2
0
 private static function init()
 {
     set_exception_handler(function ($e) {
         if (isset(self::$exceptionHandlers[get_class($e)])) {
             $handler = self::$exceptionHandlers[get_class($e)];
             if ($handler($e)) {
                 return;
             }
         }
         if ($e instanceof RouteNotFoundException) {
             // exception for a special exception; if a user mistypes a URL, show a 404 not found page.
             (new ErrorResponse(new TemplateResponse('page_not_found', ['exception' => $e]), 404))->render();
             return;
         }
         if ($e instanceof RouteParameterException) {
             $data = ['exception' => $e];
             (new ErrorResponse(new TemplateResponse('route_invalid_parameters', $data), 404))->render();
             return;
         }
         if ($e instanceof UnexpectedValueException) {
             $trace = $e->getTrace();
             if (isset($trace[0]['class']) && $trace[0]['class'] === LogException::class && stripos($e->getMessage(), 'check permissions') !== false) {
                 error_log('Cannot write to app log files, please check permissions for ' . LOG_DIR);
                 (new ExceptionResponse($e))->render();
                 return;
             }
         }
         Logger::log(Logger::CRITICAL, strval($e));
         (new ExceptionResponse($e))->render();
     });
     set_error_handler(function ($errno, $errstr, $file, $line) {
         static $logLevels = [E_NOTICE => Logger::NOTICE, E_USER_NOTICE => Logger::NOTICE, E_STRICT => Logger::NOTICE, E_DEPRECATED => Logger::NOTICE, E_USER_DEPRECATED => Logger::NOTICE, E_WARNING => Logger::WARNING, E_USER_WARNING => Logger::WARNING, E_ERROR => Logger::ERROR, E_RECOVERABLE_ERROR => Logger::ERROR, E_USER_ERROR => Logger::ERROR];
         $message = 'Error in file ' . $file . ', line ' . $line . ':' . PHP_EOL . $errstr . ' (code: ' . $errno . ')';
         Logger::log($logLevels[$errno] ?? Logger::ERROR, $message);
         (new ErrorResponse($message))->render();
         if (isset($logLevels[$errno]) && $logLevels[$errno] === Logger::NOTICE) {
             // notice level errors usually don't break code, so we continue;
             // it has been logged and displayed already anyway
             return false;
         }
         return true;
     });
     register_shutdown_function(function () {
         /**
          * @param Exception|Throwable $e
          */
         $log = function ($e) {
             Logger::log(Logger::CRITICAL, sprintf("%s thrown in shutdown handler: %s\n%s", get_class($e), $e->getMessage(), $e->getTraceAsString()));
         };
         foreach (self::$shutdownHandlers as $handler) {
             try {
                 $handler();
             } catch (Throwable $t) {
                 $log($t);
             }
         }
     });
 }