Errors.php 2.4 KB

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