vendor/symfony/serializer/Normalizer/ProblemNormalizer.php line 43

  1. <?php
  2. /*
  3.  * This file is part of the Symfony package.
  4.  *
  5.  * (c) Fabien Potencier <fabien@symfony.com>
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. namespace Symfony\Component\Serializer\Normalizer;
  11. use Symfony\Component\ErrorHandler\Exception\FlattenException;
  12. use Symfony\Component\Serializer\Exception\InvalidArgumentException;
  13. /**
  14.  * Normalizes errors according to the API Problem spec (RFC 7807).
  15.  *
  16.  * @see https://tools.ietf.org/html/rfc7807
  17.  *
  18.  * @author Kévin Dunglas <dunglas@gmail.com>
  19.  * @author Yonel Ceruto <yonelceruto@gmail.com>
  20.  */
  21. class ProblemNormalizer implements NormalizerInterfaceCacheableSupportsMethodInterface
  22. {
  23.     public const TITLE 'title';
  24.     public const TYPE 'type';
  25.     public const STATUS 'status';
  26.     private $debug;
  27.     private $defaultContext = [
  28.         self::TYPE => 'https://tools.ietf.org/html/rfc2616#section-10',
  29.         self::TITLE => 'An error occurred',
  30.     ];
  31.     public function __construct(bool $debug false, array $defaultContext = [])
  32.     {
  33.         $this->debug $debug;
  34.         $this->defaultContext $defaultContext $this->defaultContext;
  35.     }
  36.     public function normalize(mixed $objectstring $format null, array $context = []): array
  37.     {
  38.         if (!$object instanceof FlattenException) {
  39.             throw new InvalidArgumentException(sprintf('The object must implement "%s".'FlattenException::class));
  40.         }
  41.         $context += $this->defaultContext;
  42.         $debug $this->debug && ($context['debug'] ?? true);
  43.         $data = [
  44.             self::TYPE => $context['type'],
  45.             self::TITLE => $context['title'],
  46.             self::STATUS => $context['status'] ?? $object->getStatusCode(),
  47.             'detail' => $debug $object->getMessage() : $object->getStatusText(),
  48.         ];
  49.         if ($debug) {
  50.             $data['class'] = $object->getClass();
  51.             $data['trace'] = $object->getTrace();
  52.         }
  53.         return $data;
  54.     }
  55.     /**
  56.      * @param array $context
  57.      */
  58.     public function supportsNormalization(mixed $datastring $format null /* , array $context = [] */): bool
  59.     {
  60.         return $data instanceof FlattenException;
  61.     }
  62.     public function hasCacheableSupportsMethod(): bool
  63.     {
  64.         return true;
  65.     }
  66. }