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

Open in your IDE?
  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.     /**
  37.      * {@inheritdoc}
  38.      */
  39.     public function normalize(mixed $objectstring $format null, array $context = []): array
  40.     {
  41.         if (!$object instanceof FlattenException) {
  42.             throw new InvalidArgumentException(sprintf('The object must implement "%s".'FlattenException::class));
  43.         }
  44.         $context += $this->defaultContext;
  45.         $debug $this->debug && ($context['debug'] ?? true);
  46.         $data = [
  47.             self::TYPE => $context['type'],
  48.             self::TITLE => $context['title'],
  49.             self::STATUS => $context['status'] ?? $object->getStatusCode(),
  50.             'detail' => $debug $object->getMessage() : $object->getStatusText(),
  51.         ];
  52.         if ($debug) {
  53.             $data['class'] = $object->getClass();
  54.             $data['trace'] = $object->getTrace();
  55.         }
  56.         return $data;
  57.     }
  58.     /**
  59.      * {@inheritdoc}
  60.      *
  61.      * @param array $context
  62.      */
  63.     public function supportsNormalization(mixed $datastring $format null /* , array $context = [] */): bool
  64.     {
  65.         return $data instanceof FlattenException;
  66.     }
  67.     /**
  68.      * {@inheritdoc}
  69.      */
  70.     public function hasCacheableSupportsMethod(): bool
  71.     {
  72.         return true;
  73.     }
  74. }