Base::validate()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 9
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 5
c 1
b 0
f 0
dl 0
loc 9
ccs 0
cts 6
cp 0
rs 10
cc 2
nc 2
nop 0
crap 6
1
<?php
2
3
declare(strict_types=1);
4
5
namespace CdekSDK2\BaseTypes;
6
7
use JMS\Serializer\Annotation as Serializer;
8
use JMS\Serializer\Annotation\Type;
9
use Rakit\Validation\Validator;
10
11
/**
12
 * Class Base
13
 * @package CdekSDK2\BaseTypes
14
 */
15
class Base
16
{
17
    /**
18
     * Правила для валидаций
19
     * @Serializer\Exclude()
20
     * @var array
21
     */
22
    protected $rules = [];
23
24
    /**
25
     * Ошибки валидации
26
     * @Serializer\Exclude()
27
     * @Type("array")
28
     * @var array
29
     */
30
    protected $validationErrors = [];
31
32
    /**
33
     * Base конструктор
34
     * @param array $param
35
     */
36
    public function __construct(array $param = [])
37
    {
38
        foreach ($param as $key => $value) {
39
            if (property_exists($this, $key)) {
40
                $this->$key = $value;
41
            }
42
        }
43
    }
44
45
    /**
46
     * Валидация правил
47
     * @return bool
48
     * @psalm-suppress UndefinedDocblockClass
49
     */
50
    public function validate(): bool
51
    {
52
        $validator = new Validator();
53
        $validation = $validator->validate(get_object_vars($this), $this->rules);
54
55
        if ($validation->fails()) {
56
            $this->validationErrors[] = $validation->errors()->all();
57
        }
58
        return $validation->passes();
59
    }
60
61
    /**
62
     * Создание объекта из массива
63
     * @param array $data
64
     * @return static
65
     */
66
    public static function create(array $data = []): self
67
    {
68
        \assert(\is_array($data));
69
70
        return new static($data);
71
    }
72
}
73