[ Index ]

PHP Cross Reference of Joomla 4.2.2 documentation

title

Body

[close]

/libraries/src/Error/Renderer/ -> JsonapiRenderer.php (source)

   1  <?php
   2  
   3  /**
   4   * Joomla! Content Management System
   5   *
   6   * @copyright  (C) 2019 Open Source Matters, Inc. <https://www.joomla.org>
   7   * @license    GNU General Public License version 2 or later; see LICENSE
   8   */
   9  
  10  namespace Joomla\CMS\Error\Renderer;
  11  
  12  use Joomla\Application\WebApplicationInterface;
  13  use Joomla\CMS\Error\JsonApi\AuthenticationFailedExceptionHandler;
  14  use Joomla\CMS\Error\JsonApi\CheckinCheckoutExceptionHandler;
  15  use Joomla\CMS\Error\JsonApi\InvalidParameterExceptionHandler;
  16  use Joomla\CMS\Error\JsonApi\InvalidRouteExceptionHandler;
  17  use Joomla\CMS\Error\JsonApi\NotAcceptableExceptionHandler;
  18  use Joomla\CMS\Error\JsonApi\NotAllowedExceptionHandler;
  19  use Joomla\CMS\Error\JsonApi\ResourceNotFoundExceptionHandler;
  20  use Joomla\CMS\Error\JsonApi\SaveExceptionHandler;
  21  use Joomla\CMS\Error\JsonApi\SendEmailExceptionHandler;
  22  use Joomla\CMS\Factory;
  23  use Tobscure\JsonApi\ErrorHandler;
  24  use Tobscure\JsonApi\Exception\Handler\FallbackExceptionHandler;
  25  use Tobscure\JsonApi\Exception\Handler\ResponseBag;
  26  
  27  // phpcs:disable PSR1.Files.SideEffects
  28  \defined('JPATH_PLATFORM') or die;
  29  // phpcs:enable PSR1.Files.SideEffects
  30  
  31  /**
  32   * JSON error page renderer
  33   *
  34   * @since  4.0.0
  35   */
  36  class JsonapiRenderer extends JsonRenderer
  37  {
  38      /**
  39       * The format (type) of the error page
  40       *
  41       * @var    string
  42       * @since  4.0.0
  43       */
  44      protected $type = 'jsonapi';
  45  
  46      /**
  47       * Render the error page for the given object
  48       *
  49       * @param   \Throwable  $error  The error object to be rendered
  50       *
  51       * @return  string
  52       *
  53       * @since   4.0.0
  54       */
  55      public function render(\Throwable $error): string
  56      {
  57          if ($error instanceof \Exception) {
  58              $errors = new ErrorHandler();
  59  
  60              $errors->registerHandler(new InvalidRouteExceptionHandler());
  61              $errors->registerHandler(new AuthenticationFailedExceptionHandler());
  62              $errors->registerHandler(new NotAcceptableExceptionHandler());
  63              $errors->registerHandler(new NotAllowedExceptionHandler());
  64              $errors->registerHandler(new InvalidParameterExceptionHandler());
  65              $errors->registerHandler(new ResourceNotFoundExceptionHandler());
  66              $errors->registerHandler(new SaveExceptionHandler());
  67              $errors->registerHandler(new CheckinCheckoutExceptionHandler());
  68              $errors->registerHandler(new SendEmailExceptionHandler());
  69              $errors->registerHandler(new FallbackExceptionHandler(JDEBUG));
  70  
  71              $response = $errors->handle($error);
  72          } else {
  73              $code = 500;
  74              $errorInfo = ['code' => $code, 'title' => 'Internal server error'];
  75  
  76              if (JDEBUG) {
  77                  $errorInfo['detail'] = (string) $error;
  78              }
  79  
  80              $response = new ResponseBag($code, $errorInfo);
  81          }
  82  
  83          $this->getDocument()->setErrors($response->getErrors());
  84          $app = Factory::getApplication();
  85  
  86          if ($app instanceof WebApplicationInterface) {
  87              $app->setHeader('status', $response->getStatus());
  88          }
  89  
  90          if (ob_get_contents()) {
  91              ob_end_clean();
  92          }
  93  
  94          return $this->getDocument()->render();
  95      }
  96  }


Generated: Wed Sep 7 05:41:13 2022 Chilli.vc Blog - For Webmaster,Blog-Writer,System Admin and Domainer