Errors.php 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <?php
  2. /**
  3. * @package Grav\Common\Errors
  4. *
  5. * @copyright Copyright (C) 2015 - 2019 Trilby Media, LLC. All rights reserved.
  6. * @license MIT License; see LICENSE file for details.
  7. */
  8. namespace Grav\Common\Errors;
  9. use Grav\Common\Grav;
  10. use Whoops;
  11. class Errors
  12. {
  13. public function resetHandlers()
  14. {
  15. $grav = Grav::instance();
  16. $config = $grav['config']->get('system.errors');
  17. $jsonRequest = $_SERVER && isset($_SERVER['HTTP_ACCEPT']) && $_SERVER['HTTP_ACCEPT'] === 'application/json';
  18. // Setup Whoops-based error handler
  19. $system = new SystemFacade;
  20. $whoops = new Whoops\Run($system);
  21. $verbosity = 1;
  22. if (isset($config['display'])) {
  23. if (is_int($config['display'])) {
  24. $verbosity = $config['display'];
  25. } else {
  26. $verbosity = $config['display'] ? 1 : 0;
  27. }
  28. }
  29. switch ($verbosity) {
  30. case 1:
  31. $error_page = new Whoops\Handler\PrettyPageHandler;
  32. $error_page->setPageTitle('Crikey! There was an error...');
  33. $error_page->addResourcePath(GRAV_ROOT . '/system/assets');
  34. $error_page->addCustomCss('whoops.css');
  35. $whoops->pushHandler($error_page);
  36. break;
  37. case -1:
  38. $whoops->pushHandler(new BareHandler);
  39. break;
  40. default:
  41. $whoops->pushHandler(new SimplePageHandler);
  42. break;
  43. }
  44. if (Whoops\Util\Misc::isAjaxRequest() || $jsonRequest) {
  45. $whoops->pushHandler(new Whoops\Handler\JsonResponseHandler);
  46. }
  47. if (isset($config['log']) && $config['log']) {
  48. $logger = $grav['log'];
  49. $whoops->pushHandler(function($exception, $inspector, $run) use ($logger) {
  50. try {
  51. $logger->addCritical($exception->getMessage() . ' - Trace: ' . $exception->getTraceAsString());
  52. } catch (\Exception $e) {
  53. echo $e;
  54. }
  55. });
  56. }
  57. $whoops->register();
  58. // Re-register deprecation handler.
  59. $grav['debugger']->setErrorHandler();
  60. }
  61. }