ValidationException::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 2
c 1
b 0
f 0
nc 1
nop 4
dl 0
loc 8
rs 10
1
<?php
2
declare(strict_types=1);
3
4
namespace BrenoRoosevelt\Validation;
5
6
use Exception;
7
use Throwable;
8
9
class ValidationException extends Exception
10
{
11
    private Result $violations;
12
13
    public function __construct(
14
        ValidationResultSet|ValidationResult $violations,
15
        ?string $message = null,
16
        $code = 422,
17
        Throwable $previous = null
18
    ) {
19
        $this->violations = $violations;
20
        parent::__construct($message ?? $this->formatMessage(), $code, $previous);
21
    }
22
23
    /**
24
     * @return ValidationResult[]
25
     */
26
    public function violations(): array
27
    {
28
        return
29
            $this->violations instanceof ValidationResultSet ?
30
                $this->violations->validationResults() :
0 ignored issues
show
Bug introduced by
The method validationResults() does not exist on BrenoRoosevelt\Validation\Result. It seems like you code against a sub-type of BrenoRoosevelt\Validation\Result such as BrenoRoosevelt\Validation\ValidationResultSet. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

30
                $this->violations->/** @scrutinizer ignore-call */ 
31
                                   validationResults() :
Loading history...
31
                [$this->violations];
32
    }
33
34
    private function formatMessage(): string
35
    {
36
        $messages = [];
37
        foreach ($this->violations() as $violation) {
38
            $fieldName = $violation instanceof ResultByField ? $violation->getField() : '_error';
39
            foreach ($violation->getErrors() as $errorForField) {
40
                $messages[] = "\t - `$fieldName`: $errorForField";
41
            }
42
        }
43
44
        return "Validation errors:" . PHP_EOL . implode(PHP_EOL, $messages);
45
    }
46
}
47