12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- <?php
- /*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- namespace Symfony\Component\Serializer\Normalizer;
- use Symfony\Component\ErrorHandler\Exception\FlattenException;
- use Symfony\Component\Serializer\Exception\InvalidArgumentException;
- /**
- * Normalizes errors according to the API Problem spec (RFC 7807).
- *
- * @see https://tools.ietf.org/html/rfc7807
- *
- * @author Kévin Dunglas <dunglas@gmail.com>
- * @author Yonel Ceruto <yonelceruto@gmail.com>
- */
- class ProblemNormalizer implements NormalizerInterface, CacheableSupportsMethodInterface
- {
- private $debug;
- private $defaultContext = [
- 'type' => 'https://tools.ietf.org/html/rfc2616#section-10',
- 'title' => 'An error occurred',
- ];
- public function __construct(bool $debug = false, array $defaultContext = [])
- {
- $this->debug = $debug;
- $this->defaultContext = $defaultContext + $this->defaultContext;
- }
- /**
- * {@inheritdoc}
- *
- * @return array
- */
- public function normalize($object, string $format = null, array $context = [])
- {
- if (!$object instanceof FlattenException) {
- throw new InvalidArgumentException(sprintf('The object must implement "%s".', FlattenException::class));
- }
- $context += $this->defaultContext;
- $debug = $this->debug && ($context['debug'] ?? true);
- $data = [
- 'type' => $context['type'],
- 'title' => $context['title'],
- 'status' => $context['status'] ?? $object->getStatusCode(),
- 'detail' => $debug ? $object->getMessage() : $object->getStatusText(),
- ];
- if ($debug) {
- $data['class'] = $object->getClass();
- $data['trace'] = $object->getTrace();
- }
- return $data;
- }
- /**
- * {@inheritdoc}
- */
- public function supportsNormalization($data, string $format = null): bool
- {
- return $data instanceof FlattenException;
- }
- /**
- * {@inheritdoc}
- */
- public function hasCacheableSupportsMethod(): bool
- {
- return true;
- }
- }
|