Skouter mortgage estimates. Web application with view written in PHP and Vue, but controller and models in Go.
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 
 
 
 

118 wiersze
2.9 KiB

  1. <?php
  2. namespace Grav\Plugin;
  3. use Composer\Autoload\ClassLoader;
  4. use Grav\Common\Page\Interfaces\PageInterface;
  5. use Grav\Common\Plugin;
  6. use Grav\Common\Page\Page;
  7. use Grav\Common\Page\Pages;
  8. use Grav\Common\Page\Types;
  9. use RocketTheme\Toolbox\Event\Event;
  10. class ErrorPlugin extends Plugin
  11. {
  12. /**
  13. * @return array
  14. */
  15. public static function getSubscribedEvents(): array
  16. {
  17. return [
  18. 'onCliInitialize' => [
  19. ['autoload', 100000],
  20. ],
  21. 'onPageNotFound' => [
  22. ['onPageNotFound', 0]
  23. ],
  24. 'onGetPageTemplates' => [
  25. ['onGetPageTemplates', 0]
  26. ],
  27. 'onTwigTemplatePaths' => [
  28. ['onTwigTemplatePaths', -10]
  29. ],
  30. 'onDisplayErrorPage.404'=> [
  31. ['onDisplayErrorPage404', -1]
  32. ]
  33. ];
  34. }
  35. /**
  36. * [onPluginsInitialized:100000] Composer autoload.
  37. *
  38. * @return ClassLoader
  39. */
  40. public function autoload(): ClassLoader
  41. {
  42. return require __DIR__ . '/vendor/autoload.php';
  43. }
  44. /**
  45. * @param Event $event
  46. */
  47. public function onDisplayErrorPage404(Event $event): void
  48. {
  49. if ($this->isAdmin()) {
  50. return;
  51. }
  52. $event['page'] = $this->getErrorPage();
  53. $event->stopPropagation();
  54. }
  55. /**
  56. * Display error page if no page was found for the current route.
  57. *
  58. * @param Event $event
  59. */
  60. public function onPageNotFound(Event $event): void
  61. {
  62. $event->page = $this->getErrorPage();
  63. $event->stopPropagation();
  64. }
  65. /**
  66. * @return PageInterface
  67. * @throws \Exception
  68. */
  69. public function getErrorPage(): PageInterface
  70. {
  71. /** @var Pages $pages */
  72. $pages = $this->grav['pages'];
  73. // Try to load user error page.
  74. $page = $pages->dispatch($this->config->get('plugins.error.routes.404', '/error'), true);
  75. if (!$page) {
  76. // If none provided use built in error page.
  77. $page = new Page;
  78. $page->init(new \SplFileInfo(__DIR__ . '/pages/error.md'));
  79. $page->title($this->grav['language']->translate('PLUGIN_ERROR.ERROR') . ' ' . $page->header()->http_response_code);
  80. }
  81. // Login page may not have the correct Cache-Control header set, force no-store for the proxies.
  82. $cacheControl = $page->cacheControl();
  83. if (!$cacheControl) {
  84. $page->cacheControl('private, no-cache, must-revalidate');
  85. }
  86. return $page;
  87. }
  88. /**
  89. * Add page template types.
  90. */
  91. public function onGetPageTemplates(Event $event): void
  92. {
  93. /** @var Types $types */
  94. $types = $event->types;
  95. $types->register('error');
  96. }
  97. /**
  98. * Add current directory to twig lookup paths.
  99. */
  100. public function onTwigTemplatePaths(): void
  101. {
  102. $this->grav['twig']->twig_paths[] = __DIR__ . '/templates';
  103. }
  104. }