ErrorHandler.php 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. <?php
  2. namespace Opentalent\OtTemplating\Page;
  3. use Psr\Http\Message\ResponseInterface;
  4. use Psr\Http\Message\ServerRequestInterface;
  5. use TYPO3\CMS\Core\Error\PageErrorHandler\PageErrorHandlerInterface;
  6. use TYPO3\CMS\Core\Http\HtmlResponse;
  7. use TYPO3\CMS\Core\Utility\GeneralUtility;
  8. use TYPO3\CMS\Fluid\View\TemplateView;
  9. use TYPO3Fluid\Fluid\View\ViewInterface;
  10. class ErrorHandler implements PageErrorHandlerInterface
  11. {
  12. const TEMPLATES_ROOT_PATHS = 'EXT:ot_templating/Resources/Private/Templates';
  13. const LAYOUTS_ROOT_PATHS = 'EXT:ot_templating/Resources/Private/Layouts';
  14. const PARTIALS_ROOT_PATHS = 'EXT:ot_templating/Resources/Private/Partials';
  15. const TEMPLATE_FILES = [
  16. 403 => self::TEMPLATES_ROOT_PATHS . '/Page/Error/403.html',
  17. 404 => self::TEMPLATES_ROOT_PATHS . '/Page/Error/404.html',
  18. 500 => self::TEMPLATES_ROOT_PATHS . '/Page/Error/500.html'
  19. ];
  20. /**
  21. * Status code of the response
  22. * @var int
  23. */
  24. protected $statusCode;
  25. /**
  26. * Configuration of the error handler as set in site configuration.
  27. * @var array
  28. */
  29. protected $errorHandlerConfiguration;
  30. /**
  31. * @var ViewInterface
  32. */
  33. protected $view;
  34. public function __construct(int $statusCode, array $configuration)
  35. {
  36. $this->statusCode = $statusCode;
  37. $this->errorHandlerConfiguration = $configuration;
  38. $this->view = GeneralUtility::makeInstance(TemplateView::class);
  39. $this->view->setTemplateRootPaths([self::TEMPLATES_ROOT_PATHS]);
  40. $this->view->setLayoutRootPaths([self::LAYOUTS_ROOT_PATHS]);
  41. $this->view->setPartialRootPaths([self::PARTIALS_ROOT_PATHS]);
  42. $this->view->setTemplatePathAndFilename(
  43. GeneralUtility::getFileAbsFileName(self::TEMPLATE_FILES[$statusCode])
  44. );
  45. }
  46. /**
  47. * @param ServerRequestInterface $request
  48. * @param string $message
  49. * @param array $reasons
  50. * @return ResponseInterface
  51. */
  52. public function handlePageError(
  53. ServerRequestInterface $request,
  54. string $message,
  55. array $reasons = []
  56. ): ResponseInterface {
  57. $pageRepository = GeneralUtility::makeInstance(OtPageRepository::class);
  58. $site = $pageRepository->getCurrentSite();
  59. $baseUri = $site->getBase();
  60. $this->view->assignMultiple([
  61. 'request' => $request,
  62. 'message' => $message,
  63. 'reasons' => $reasons,
  64. 'homeUri' => $baseUri,
  65. 'siteTitle' => $site->getConfiguration()['websiteTitle']
  66. ]);
  67. return new HtmlResponse($this->view->render(), $this->statusCode);
  68. }
  69. }