Code Coverage
 
Lines
Branches
Paths
Functions and Methods
Classes and Traits
Total
94.74% covered (success)
94.74%
18 / 19
95.24% covered (success)
95.24%
20 / 21
29.17% covered (danger)
29.17%
7 / 24
83.33% covered (warning)
83.33%
5 / 6
CRAP
0.00% covered (danger)
0.00%
0 / 1
UnprocessableEntityHttpExceptionNormalizer
94.74% covered (success)
94.74%
18 / 19
95.24% covered (success)
95.24%
20 / 21
29.17% covered (danger)
29.17%
7 / 24
83.33% covered (warning)
83.33%
5 / 6
63.18
0.00% covered (danger)
0.00%
0 / 1
 supportsNormalization
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 normalizeErrors
92.86% covered (success)
92.86%
13 / 14
93.75% covered (success)
93.75%
15 / 16
10.53% covered (danger)
10.53%
2 / 19
0.00% covered (danger)
0.00%
0 / 1
42.10
 getSupportedTypes
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getErrorCode
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getMessage
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getStatus
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3namespace App\Normalizer;
4
5use App\Exception\ErrorCode;
6use App\Exception\ErrorMessage;
7use Symfony\Component\Clock\ClockAwareTrait;
8use Symfony\Component\HttpFoundation\Response;
9use Symfony\Component\HttpKernel\Exception\UnprocessableEntityHttpException;
10use Symfony\Component\Validator\Constraint;
11use Symfony\Component\Validator\Exception\ValidationFailedException;
12
13class UnprocessableEntityHttpExceptionNormalizer extends ExceptionNormalizer
14{
15    use ClockAwareTrait;
16
17    /**
18     * @param array<string, mixed> $context
19     */
20    public function supportsNormalization(mixed $data, ?string $format = null, array $context = []): bool
21    {
22        return $data instanceof UnprocessableEntityHttpException;
23    }
24
25    /**
26     * @return array<string, array<string, string[]|int[]>>
27     */
28    protected function normalizeErrors(\Throwable $throwable): array
29    {
30        if (!$throwable instanceof UnprocessableEntityHttpException) {
31            throw new \InvalidArgumentException();
32        }
33
34        /**
35         * @var ValidationFailedException $validationFailedException
36         */
37        $validationFailedException = $throwable->getPrevious();
38
39        $errorsAsArray = [];
40        foreach ($validationFailedException->getViolations() as $violation) {
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
46                $errorsAsArray[$propertyPath] = [];
47            }
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
49                $errorsAsArray[$propertyPath][$detailCode] = [];
50            }
51            $errorsAsArray[$propertyPath][$detailCode][strtolower($detailCode)] = $this->translator->translate($violation->getMessage());
52        }
53
54        return $errorsAsArray;
55    }
56
57    public function getSupportedTypes(?string $format): array
58    {
59        return [UnprocessableEntityHttpException::class => true];
60    }
61
62    #[\Override]
63    protected function getErrorCode(\Throwable $throwable): ErrorCode
64    {
65        return ErrorCode::VALIDATION_ERROR;
66    }
67
68    protected function getMessage(\Throwable $throwable): string
69    {
70        return ErrorMessage::VALIDATION_FAILED;
71    }
72
73    #[\Override]
74    protected function getStatus(\Throwable $throwable): int
75    {
76        return Response::HTTP_UNPROCESSABLE_ENTITY;
77    }
78}

Paths

Below are the source code lines that represent each code path as identified by Xdebug. Please note a path is not necessarily coterminous with a line, a line may contain multiple paths and therefore show up more than once. Please also be aware that some paths may include implicit rather than explicit branches, e.g. an if statement always has an else as part of its logical flow even if you didn't write one.

UnprocessableEntityHttpExceptionNormalizer->getErrorCode
63    protected function getErrorCode(\Throwable $throwable): ErrorCode
64    {
65        return ErrorCode::VALIDATION_ERROR;
66    }
UnprocessableEntityHttpExceptionNormalizer->getMessage
68    protected function getMessage(\Throwable $throwable): string
69    {
70        return ErrorMessage::VALIDATION_FAILED;
71    }
UnprocessableEntityHttpExceptionNormalizer->getStatus
74    protected function getStatus(\Throwable $throwable): int
75    {
76        return Response::HTTP_UNPROCESSABLE_ENTITY;
77    }
UnprocessableEntityHttpExceptionNormalizer->getSupportedTypes
57    public function getSupportedTypes(?string $format): array
58    {
59        return [UnprocessableEntityHttpException::class => true];
60    }
UnprocessableEntityHttpExceptionNormalizer->normalizeErrors
28    protected function normalizeErrors(\Throwable $throwable): array
29    {
30        if (!$throwable instanceof UnprocessableEntityHttpException) {
 
31            throw new \InvalidArgumentException();
28    protected function normalizeErrors(\Throwable $throwable): array
29    {
30        if (!$throwable instanceof UnprocessableEntityHttpException) {
 
37        $validationFailedException = $throwable->getPrevious();
38
39        $errorsAsArray = [];
40        foreach ($validationFailedException->getViolations() as $violation) {
 
40        foreach ($validationFailedException->getViolations() as $violation) {
 
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
 
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
 
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
 
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
 
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
 
46                $errorsAsArray[$propertyPath] = [];
47            }
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
 
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
 
49                $errorsAsArray[$propertyPath][$detailCode] = [];
50            }
51            $errorsAsArray[$propertyPath][$detailCode][strtolower($detailCode)] = $this->translator->translate($violation->getMessage());
 
40        foreach ($validationFailedException->getViolations() as $violation) {
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
46                $errorsAsArray[$propertyPath] = [];
47            }
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
49                $errorsAsArray[$propertyPath][$detailCode] = [];
50            }
51            $errorsAsArray[$propertyPath][$detailCode][strtolower($detailCode)] = $this->translator->translate($violation->getMessage());
 
40        foreach ($validationFailedException->getViolations() as $violation) {
 
40        foreach ($validationFailedException->getViolations() as $violation) {
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
46                $errorsAsArray[$propertyPath] = [];
47            }
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
49                $errorsAsArray[$propertyPath][$detailCode] = [];
50            }
51            $errorsAsArray[$propertyPath][$detailCode][strtolower($detailCode)] = $this->translator->translate($violation->getMessage());
52        }
53
54        return $errorsAsArray;
55    }
28    protected function normalizeErrors(\Throwable $throwable): array
29    {
30        if (!$throwable instanceof UnprocessableEntityHttpException) {
 
37        $validationFailedException = $throwable->getPrevious();
38
39        $errorsAsArray = [];
40        foreach ($validationFailedException->getViolations() as $violation) {
 
40        foreach ($validationFailedException->getViolations() as $violation) {
 
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
 
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
 
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
 
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
 
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
 
46                $errorsAsArray[$propertyPath] = [];
47            }
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
 
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
 
40        foreach ($validationFailedException->getViolations() as $violation) {
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
46                $errorsAsArray[$propertyPath] = [];
47            }
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
49                $errorsAsArray[$propertyPath][$detailCode] = [];
50            }
51            $errorsAsArray[$propertyPath][$detailCode][strtolower($detailCode)] = $this->translator->translate($violation->getMessage());
 
40        foreach ($validationFailedException->getViolations() as $violation) {
 
40        foreach ($validationFailedException->getViolations() as $violation) {
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
46                $errorsAsArray[$propertyPath] = [];
47            }
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
49                $errorsAsArray[$propertyPath][$detailCode] = [];
50            }
51            $errorsAsArray[$propertyPath][$detailCode][strtolower($detailCode)] = $this->translator->translate($violation->getMessage());
52        }
53
54        return $errorsAsArray;
55    }
28    protected function normalizeErrors(\Throwable $throwable): array
29    {
30        if (!$throwable instanceof UnprocessableEntityHttpException) {
 
37        $validationFailedException = $throwable->getPrevious();
38
39        $errorsAsArray = [];
40        foreach ($validationFailedException->getViolations() as $violation) {
 
40        foreach ($validationFailedException->getViolations() as $violation) {
 
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
 
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
 
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
 
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
 
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
 
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
 
49                $errorsAsArray[$propertyPath][$detailCode] = [];
50            }
51            $errorsAsArray[$propertyPath][$detailCode][strtolower($detailCode)] = $this->translator->translate($violation->getMessage());
 
40        foreach ($validationFailedException->getViolations() as $violation) {
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
46                $errorsAsArray[$propertyPath] = [];
47            }
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
49                $errorsAsArray[$propertyPath][$detailCode] = [];
50            }
51            $errorsAsArray[$propertyPath][$detailCode][strtolower($detailCode)] = $this->translator->translate($violation->getMessage());
 
40        foreach ($validationFailedException->getViolations() as $violation) {
 
40        foreach ($validationFailedException->getViolations() as $violation) {
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
46                $errorsAsArray[$propertyPath] = [];
47            }
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
49                $errorsAsArray[$propertyPath][$detailCode] = [];
50            }
51            $errorsAsArray[$propertyPath][$detailCode][strtolower($detailCode)] = $this->translator->translate($violation->getMessage());
52        }
53
54        return $errorsAsArray;
55    }
28    protected function normalizeErrors(\Throwable $throwable): array
29    {
30        if (!$throwable instanceof UnprocessableEntityHttpException) {
 
37        $validationFailedException = $throwable->getPrevious();
38
39        $errorsAsArray = [];
40        foreach ($validationFailedException->getViolations() as $violation) {
 
40        foreach ($validationFailedException->getViolations() as $violation) {
 
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
 
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
 
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
 
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
 
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
 
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
 
40        foreach ($validationFailedException->getViolations() as $violation) {
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
46                $errorsAsArray[$propertyPath] = [];
47            }
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
49                $errorsAsArray[$propertyPath][$detailCode] = [];
50            }
51            $errorsAsArray[$propertyPath][$detailCode][strtolower($detailCode)] = $this->translator->translate($violation->getMessage());
 
40        foreach ($validationFailedException->getViolations() as $violation) {
 
40        foreach ($validationFailedException->getViolations() as $violation) {
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
46                $errorsAsArray[$propertyPath] = [];
47            }
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
49                $errorsAsArray[$propertyPath][$detailCode] = [];
50            }
51            $errorsAsArray[$propertyPath][$detailCode][strtolower($detailCode)] = $this->translator->translate($violation->getMessage());
52        }
53
54        return $errorsAsArray;
55    }
28    protected function normalizeErrors(\Throwable $throwable): array
29    {
30        if (!$throwable instanceof UnprocessableEntityHttpException) {
 
37        $validationFailedException = $throwable->getPrevious();
38
39        $errorsAsArray = [];
40        foreach ($validationFailedException->getViolations() as $violation) {
 
40        foreach ($validationFailedException->getViolations() as $violation) {
 
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
 
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
 
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
 
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
 
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
 
46                $errorsAsArray[$propertyPath] = [];
47            }
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
 
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
 
49                $errorsAsArray[$propertyPath][$detailCode] = [];
50            }
51            $errorsAsArray[$propertyPath][$detailCode][strtolower($detailCode)] = $this->translator->translate($violation->getMessage());
 
40        foreach ($validationFailedException->getViolations() as $violation) {
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
46                $errorsAsArray[$propertyPath] = [];
47            }
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
49                $errorsAsArray[$propertyPath][$detailCode] = [];
50            }
51            $errorsAsArray[$propertyPath][$detailCode][strtolower($detailCode)] = $this->translator->translate($violation->getMessage());
 
40        foreach ($validationFailedException->getViolations() as $violation) {
 
40        foreach ($validationFailedException->getViolations() as $violation) {
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
46                $errorsAsArray[$propertyPath] = [];
47            }
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
49                $errorsAsArray[$propertyPath][$detailCode] = [];
50            }
51            $errorsAsArray[$propertyPath][$detailCode][strtolower($detailCode)] = $this->translator->translate($violation->getMessage());
52        }
53
54        return $errorsAsArray;
55    }
28    protected function normalizeErrors(\Throwable $throwable): array
29    {
30        if (!$throwable instanceof UnprocessableEntityHttpException) {
 
37        $validationFailedException = $throwable->getPrevious();
38
39        $errorsAsArray = [];
40        foreach ($validationFailedException->getViolations() as $violation) {
 
40        foreach ($validationFailedException->getViolations() as $violation) {
 
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
 
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
 
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
 
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
 
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
 
46                $errorsAsArray[$propertyPath] = [];
47            }
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
 
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
 
40        foreach ($validationFailedException->getViolations() as $violation) {
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
46                $errorsAsArray[$propertyPath] = [];
47            }
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
49                $errorsAsArray[$propertyPath][$detailCode] = [];
50            }
51            $errorsAsArray[$propertyPath][$detailCode][strtolower($detailCode)] = $this->translator->translate($violation->getMessage());
 
40        foreach ($validationFailedException->getViolations() as $violation) {
 
40        foreach ($validationFailedException->getViolations() as $violation) {
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
46                $errorsAsArray[$propertyPath] = [];
47            }
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
49                $errorsAsArray[$propertyPath][$detailCode] = [];
50            }
51            $errorsAsArray[$propertyPath][$detailCode][strtolower($detailCode)] = $this->translator->translate($violation->getMessage());
52        }
53
54        return $errorsAsArray;
55    }
28    protected function normalizeErrors(\Throwable $throwable): array
29    {
30        if (!$throwable instanceof UnprocessableEntityHttpException) {
 
37        $validationFailedException = $throwable->getPrevious();
38
39        $errorsAsArray = [];
40        foreach ($validationFailedException->getViolations() as $violation) {
 
40        foreach ($validationFailedException->getViolations() as $violation) {
 
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
 
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
 
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
 
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
 
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
 
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
 
49                $errorsAsArray[$propertyPath][$detailCode] = [];
50            }
51            $errorsAsArray[$propertyPath][$detailCode][strtolower($detailCode)] = $this->translator->translate($violation->getMessage());
 
40        foreach ($validationFailedException->getViolations() as $violation) {
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
46                $errorsAsArray[$propertyPath] = [];
47            }
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
49                $errorsAsArray[$propertyPath][$detailCode] = [];
50            }
51            $errorsAsArray[$propertyPath][$detailCode][strtolower($detailCode)] = $this->translator->translate($violation->getMessage());
 
40        foreach ($validationFailedException->getViolations() as $violation) {
 
40        foreach ($validationFailedException->getViolations() as $violation) {
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
46                $errorsAsArray[$propertyPath] = [];
47            }
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
49                $errorsAsArray[$propertyPath][$detailCode] = [];
50            }
51            $errorsAsArray[$propertyPath][$detailCode][strtolower($detailCode)] = $this->translator->translate($violation->getMessage());
52        }
53
54        return $errorsAsArray;
55    }
28    protected function normalizeErrors(\Throwable $throwable): array
29    {
30        if (!$throwable instanceof UnprocessableEntityHttpException) {
 
37        $validationFailedException = $throwable->getPrevious();
38
39        $errorsAsArray = [];
40        foreach ($validationFailedException->getViolations() as $violation) {
 
40        foreach ($validationFailedException->getViolations() as $violation) {
 
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
 
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
 
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
 
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
 
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
 
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
 
40        foreach ($validationFailedException->getViolations() as $violation) {
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
46                $errorsAsArray[$propertyPath] = [];
47            }
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
49                $errorsAsArray[$propertyPath][$detailCode] = [];
50            }
51            $errorsAsArray[$propertyPath][$detailCode][strtolower($detailCode)] = $this->translator->translate($violation->getMessage());
 
40        foreach ($validationFailedException->getViolations() as $violation) {
 
40        foreach ($validationFailedException->getViolations() as $violation) {
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
46                $errorsAsArray[$propertyPath] = [];
47            }
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
49                $errorsAsArray[$propertyPath][$detailCode] = [];
50            }
51            $errorsAsArray[$propertyPath][$detailCode][strtolower($detailCode)] = $this->translator->translate($violation->getMessage());
52        }
53
54        return $errorsAsArray;
55    }
28    protected function normalizeErrors(\Throwable $throwable): array
29    {
30        if (!$throwable instanceof UnprocessableEntityHttpException) {
 
37        $validationFailedException = $throwable->getPrevious();
38
39        $errorsAsArray = [];
40        foreach ($validationFailedException->getViolations() as $violation) {
 
40        foreach ($validationFailedException->getViolations() as $violation) {
 
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
 
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
 
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
 
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
 
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
 
46                $errorsAsArray[$propertyPath] = [];
47            }
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
 
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
 
49                $errorsAsArray[$propertyPath][$detailCode] = [];
50            }
51            $errorsAsArray[$propertyPath][$detailCode][strtolower($detailCode)] = $this->translator->translate($violation->getMessage());
 
40        foreach ($validationFailedException->getViolations() as $violation) {
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
46                $errorsAsArray[$propertyPath] = [];
47            }
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
49                $errorsAsArray[$propertyPath][$detailCode] = [];
50            }
51            $errorsAsArray[$propertyPath][$detailCode][strtolower($detailCode)] = $this->translator->translate($violation->getMessage());
 
40        foreach ($validationFailedException->getViolations() as $violation) {
 
40        foreach ($validationFailedException->getViolations() as $violation) {
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
46                $errorsAsArray[$propertyPath] = [];
47            }
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
49                $errorsAsArray[$propertyPath][$detailCode] = [];
50            }
51            $errorsAsArray[$propertyPath][$detailCode][strtolower($detailCode)] = $this->translator->translate($violation->getMessage());
52        }
53
54        return $errorsAsArray;
55    }
28    protected function normalizeErrors(\Throwable $throwable): array
29    {
30        if (!$throwable instanceof UnprocessableEntityHttpException) {
 
37        $validationFailedException = $throwable->getPrevious();
38
39        $errorsAsArray = [];
40        foreach ($validationFailedException->getViolations() as $violation) {
 
40        foreach ($validationFailedException->getViolations() as $violation) {
 
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
 
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
 
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
 
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
 
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
 
46                $errorsAsArray[$propertyPath] = [];
47            }
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
 
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
 
40        foreach ($validationFailedException->getViolations() as $violation) {
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
46                $errorsAsArray[$propertyPath] = [];
47            }
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
49                $errorsAsArray[$propertyPath][$detailCode] = [];
50            }
51            $errorsAsArray[$propertyPath][$detailCode][strtolower($detailCode)] = $this->translator->translate($violation->getMessage());
 
40        foreach ($validationFailedException->getViolations() as $violation) {
 
40        foreach ($validationFailedException->getViolations() as $violation) {
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
46                $errorsAsArray[$propertyPath] = [];
47            }
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
49                $errorsAsArray[$propertyPath][$detailCode] = [];
50            }
51            $errorsAsArray[$propertyPath][$detailCode][strtolower($detailCode)] = $this->translator->translate($violation->getMessage());
52        }
53
54        return $errorsAsArray;
55    }
28    protected function normalizeErrors(\Throwable $throwable): array
29    {
30        if (!$throwable instanceof UnprocessableEntityHttpException) {
 
37        $validationFailedException = $throwable->getPrevious();
38
39        $errorsAsArray = [];
40        foreach ($validationFailedException->getViolations() as $violation) {
 
40        foreach ($validationFailedException->getViolations() as $violation) {
 
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
 
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
 
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
 
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
 
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
 
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
 
49                $errorsAsArray[$propertyPath][$detailCode] = [];
50            }
51            $errorsAsArray[$propertyPath][$detailCode][strtolower($detailCode)] = $this->translator->translate($violation->getMessage());
 
40        foreach ($validationFailedException->getViolations() as $violation) {
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
46                $errorsAsArray[$propertyPath] = [];
47            }
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
49                $errorsAsArray[$propertyPath][$detailCode] = [];
50            }
51            $errorsAsArray[$propertyPath][$detailCode][strtolower($detailCode)] = $this->translator->translate($violation->getMessage());
 
40        foreach ($validationFailedException->getViolations() as $violation) {
 
40        foreach ($validationFailedException->getViolations() as $violation) {
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
46                $errorsAsArray[$propertyPath] = [];
47            }
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
49                $errorsAsArray[$propertyPath][$detailCode] = [];
50            }
51            $errorsAsArray[$propertyPath][$detailCode][strtolower($detailCode)] = $this->translator->translate($violation->getMessage());
52        }
53
54        return $errorsAsArray;
55    }
28    protected function normalizeErrors(\Throwable $throwable): array
29    {
30        if (!$throwable instanceof UnprocessableEntityHttpException) {
 
37        $validationFailedException = $throwable->getPrevious();
38
39        $errorsAsArray = [];
40        foreach ($validationFailedException->getViolations() as $violation) {
 
40        foreach ($validationFailedException->getViolations() as $violation) {
 
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
 
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
 
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
 
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
 
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
 
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
 
40        foreach ($validationFailedException->getViolations() as $violation) {
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
46                $errorsAsArray[$propertyPath] = [];
47            }
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
49                $errorsAsArray[$propertyPath][$detailCode] = [];
50            }
51            $errorsAsArray[$propertyPath][$detailCode][strtolower($detailCode)] = $this->translator->translate($violation->getMessage());
 
40        foreach ($validationFailedException->getViolations() as $violation) {
 
40        foreach ($validationFailedException->getViolations() as $violation) {
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
46                $errorsAsArray[$propertyPath] = [];
47            }
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
49                $errorsAsArray[$propertyPath][$detailCode] = [];
50            }
51            $errorsAsArray[$propertyPath][$detailCode][strtolower($detailCode)] = $this->translator->translate($violation->getMessage());
52        }
53
54        return $errorsAsArray;
55    }
28    protected function normalizeErrors(\Throwable $throwable): array
29    {
30        if (!$throwable instanceof UnprocessableEntityHttpException) {
 
37        $validationFailedException = $throwable->getPrevious();
38
39        $errorsAsArray = [];
40        foreach ($validationFailedException->getViolations() as $violation) {
 
40        foreach ($validationFailedException->getViolations() as $violation) {
 
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
 
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
 
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
 
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
 
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
 
46                $errorsAsArray[$propertyPath] = [];
47            }
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
 
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
 
49                $errorsAsArray[$propertyPath][$detailCode] = [];
50            }
51            $errorsAsArray[$propertyPath][$detailCode][strtolower($detailCode)] = $this->translator->translate($violation->getMessage());
 
40        foreach ($validationFailedException->getViolations() as $violation) {
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
46                $errorsAsArray[$propertyPath] = [];
47            }
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
49                $errorsAsArray[$propertyPath][$detailCode] = [];
50            }
51            $errorsAsArray[$propertyPath][$detailCode][strtolower($detailCode)] = $this->translator->translate($violation->getMessage());
 
40        foreach ($validationFailedException->getViolations() as $violation) {
 
40        foreach ($validationFailedException->getViolations() as $violation) {
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
46                $errorsAsArray[$propertyPath] = [];
47            }
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
49                $errorsAsArray[$propertyPath][$detailCode] = [];
50            }
51            $errorsAsArray[$propertyPath][$detailCode][strtolower($detailCode)] = $this->translator->translate($violation->getMessage());
52        }
53
54        return $errorsAsArray;
55    }
28    protected function normalizeErrors(\Throwable $throwable): array
29    {
30        if (!$throwable instanceof UnprocessableEntityHttpException) {
 
37        $validationFailedException = $throwable->getPrevious();
38
39        $errorsAsArray = [];
40        foreach ($validationFailedException->getViolations() as $violation) {
 
40        foreach ($validationFailedException->getViolations() as $violation) {
 
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
 
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
 
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
 
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
 
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
 
46                $errorsAsArray[$propertyPath] = [];
47            }
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
 
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
 
40        foreach ($validationFailedException->getViolations() as $violation) {
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
46                $errorsAsArray[$propertyPath] = [];
47            }
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
49                $errorsAsArray[$propertyPath][$detailCode] = [];
50            }
51            $errorsAsArray[$propertyPath][$detailCode][strtolower($detailCode)] = $this->translator->translate($violation->getMessage());
 
40        foreach ($validationFailedException->getViolations() as $violation) {
 
40        foreach ($validationFailedException->getViolations() as $violation) {
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
46                $errorsAsArray[$propertyPath] = [];
47            }
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
49                $errorsAsArray[$propertyPath][$detailCode] = [];
50            }
51            $errorsAsArray[$propertyPath][$detailCode][strtolower($detailCode)] = $this->translator->translate($violation->getMessage());
52        }
53
54        return $errorsAsArray;
55    }
28    protected function normalizeErrors(\Throwable $throwable): array
29    {
30        if (!$throwable instanceof UnprocessableEntityHttpException) {
 
37        $validationFailedException = $throwable->getPrevious();
38
39        $errorsAsArray = [];
40        foreach ($validationFailedException->getViolations() as $violation) {
 
40        foreach ($validationFailedException->getViolations() as $violation) {
 
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
 
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
 
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
 
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
 
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
 
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
 
49                $errorsAsArray[$propertyPath][$detailCode] = [];
50            }
51            $errorsAsArray[$propertyPath][$detailCode][strtolower($detailCode)] = $this->translator->translate($violation->getMessage());
 
40        foreach ($validationFailedException->getViolations() as $violation) {
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
46                $errorsAsArray[$propertyPath] = [];
47            }
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
49                $errorsAsArray[$propertyPath][$detailCode] = [];
50            }
51            $errorsAsArray[$propertyPath][$detailCode][strtolower($detailCode)] = $this->translator->translate($violation->getMessage());
 
40        foreach ($validationFailedException->getViolations() as $violation) {
 
40        foreach ($validationFailedException->getViolations() as $violation) {
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
46                $errorsAsArray[$propertyPath] = [];
47            }
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
49                $errorsAsArray[$propertyPath][$detailCode] = [];
50            }
51            $errorsAsArray[$propertyPath][$detailCode][strtolower($detailCode)] = $this->translator->translate($violation->getMessage());
52        }
53
54        return $errorsAsArray;
55    }
28    protected function normalizeErrors(\Throwable $throwable): array
29    {
30        if (!$throwable instanceof UnprocessableEntityHttpException) {
 
37        $validationFailedException = $throwable->getPrevious();
38
39        $errorsAsArray = [];
40        foreach ($validationFailedException->getViolations() as $violation) {
 
40        foreach ($validationFailedException->getViolations() as $violation) {
 
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
 
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
 
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
 
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
 
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
 
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
 
40        foreach ($validationFailedException->getViolations() as $violation) {
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
46                $errorsAsArray[$propertyPath] = [];
47            }
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
49                $errorsAsArray[$propertyPath][$detailCode] = [];
50            }
51            $errorsAsArray[$propertyPath][$detailCode][strtolower($detailCode)] = $this->translator->translate($violation->getMessage());
 
40        foreach ($validationFailedException->getViolations() as $violation) {
 
40        foreach ($validationFailedException->getViolations() as $violation) {
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
46                $errorsAsArray[$propertyPath] = [];
47            }
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
49                $errorsAsArray[$propertyPath][$detailCode] = [];
50            }
51            $errorsAsArray[$propertyPath][$detailCode][strtolower($detailCode)] = $this->translator->translate($violation->getMessage());
52        }
53
54        return $errorsAsArray;
55    }
28    protected function normalizeErrors(\Throwable $throwable): array
29    {
30        if (!$throwable instanceof UnprocessableEntityHttpException) {
 
37        $validationFailedException = $throwable->getPrevious();
38
39        $errorsAsArray = [];
40        foreach ($validationFailedException->getViolations() as $violation) {
 
40        foreach ($validationFailedException->getViolations() as $violation) {
 
40        foreach ($validationFailedException->getViolations() as $violation) {
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
46                $errorsAsArray[$propertyPath] = [];
47            }
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
49                $errorsAsArray[$propertyPath][$detailCode] = [];
50            }
51            $errorsAsArray[$propertyPath][$detailCode][strtolower($detailCode)] = $this->translator->translate($violation->getMessage());
52        }
53
54        return $errorsAsArray;
55    }
28    protected function normalizeErrors(\Throwable $throwable): array
29    {
30        if (!$throwable instanceof UnprocessableEntityHttpException) {
 
37        $validationFailedException = $throwable->getPrevious();
38
39        $errorsAsArray = [];
40        foreach ($validationFailedException->getViolations() as $violation) {
 
40        foreach ($validationFailedException->getViolations() as $violation) {
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
46                $errorsAsArray[$propertyPath] = [];
47            }
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
49                $errorsAsArray[$propertyPath][$detailCode] = [];
50            }
51            $errorsAsArray[$propertyPath][$detailCode][strtolower($detailCode)] = $this->translator->translate($violation->getMessage());
52        }
53
54        return $errorsAsArray;
55    }
UnprocessableEntityHttpExceptionNormalizer->supportsNormalization
20    public function supportsNormalization(mixed $data, ?string $format = null, array $context = []): bool
21    {
22        return $data instanceof UnprocessableEntityHttpException;
23    }
{main}
3namespace App\Normalizer;
4
5use App\Exception\ErrorCode;
6use App\Exception\ErrorMessage;
7use Symfony\Component\Clock\ClockAwareTrait;
8use Symfony\Component\HttpFoundation\Response;
9use Symfony\Component\HttpKernel\Exception\UnprocessableEntityHttpException;
10use Symfony\Component\Validator\Constraint;
11use Symfony\Component\Validator\Exception\ValidationFailedException;
12
13class UnprocessableEntityHttpExceptionNormalizer extends ExceptionNormalizer
14{
15    use ClockAwareTrait;
16
17    /**
18     * @param array<string, mixed> $context
19     */
20    public function supportsNormalization(mixed $data, ?string $format = null, array $context = []): bool
21    {
22        return $data instanceof UnprocessableEntityHttpException;
23    }
24
25    /**
26     * @return array<string, array<string, string[]|int[]>>
27     */
28    protected function normalizeErrors(\Throwable $throwable): array
29    {
30        if (!$throwable instanceof UnprocessableEntityHttpException) {
31            throw new \InvalidArgumentException();
32        }
33
34        /**
35         * @var ValidationFailedException $validationFailedException
36         */
37        $validationFailedException = $throwable->getPrevious();
38
39        $errorsAsArray = [];
40        foreach ($validationFailedException->getViolations() as $violation) {
41            $propertyPath = $violation->getPropertyPath();
42            /** @var class-string<Constraint> $constraintClass */
43            $constraintClass = $violation->getConstraint() ? $violation->getConstraint()::class : null;
44            $detailCode = $constraintClass ? $constraintClass::getErrorName($violation->getCode()) : 'UNKNOWN_ERROR';
45            if (!isset($errorsAsArray[$propertyPath])) {
46                $errorsAsArray[$propertyPath] = [];
47            }
48            if (!isset($errorsAsArray[$propertyPath][$detailCode])) {
49                $errorsAsArray[$propertyPath][$detailCode] = [];
50            }
51            $errorsAsArray[$propertyPath][$detailCode][strtolower($detailCode)] = $this->translator->translate($violation->getMessage());
52        }
53
54        return $errorsAsArray;
55    }
56
57    public function getSupportedTypes(?string $format): array
58    {
59        return [UnprocessableEntityHttpException::class => true];
60    }
61
62    #[\Override]
63    protected function getErrorCode(\Throwable $throwable): ErrorCode
64    {
65        return ErrorCode::VALIDATION_ERROR;
66    }
67
68    protected function getMessage(\Throwable $throwable): string
69    {
70        return ErrorMessage::VALIDATION_FAILED;
71    }
72
73    #[\Override]
74    protected function getStatus(\Throwable $throwable): int
75    {
76        return Response::HTTP_UNPROCESSABLE_ENTITY;
77    }