Passed
Push — main ( 57b38b...aec17e )
by Dimitri
04:13
created

DataValidation::attributes()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 1
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 3
ccs 0
cts 1
cp 0
crap 2
rs 10
1
<?php
2
3
/**
4
 * This file is part of Blitz PHP framework.
5
 *
6
 * (c) 2022 Dimitri Sitchet Tomkeu <[email protected]>
7
 *
8
 * For the full copyright and license information, please view
9
 * the LICENSE file that was distributed with this source code.
10
 */
11
12
namespace BlitzPHP\Validation;
13
14
use BlitzPHP\Http\Request;
15
16
abstract class DataValidation
17
{
18
    /**
19
     * Source à utiliser pour avoir les données à valider
20
     *
21
     * @example
22
     * 	`all` toutes les sources (GET, POST, COOKIE)
23
     *  `post` données issues de la soumission de formulaire ou d'API
24
     *  `get` données issues de la chaîne de requête
25
     *  `cookie` données issues des cookies
26
     * 	`post|get` données issues de $_POST et $_GET respectivement. Si on a la même clé dans plusieurs sources, seule la clé de la première source sera considérée
27
     */
28
    protected string $source = 'all';
29
30
    /**
31
     * Regles de validation
32
     */
33
    abstract protected function rules(): array;
34
35
    /**
36
     * Messages personnalisés pour les erreurs du validateur.
37
     */
38
    protected function messages(): array
39
    {
40
        return [];
41
    }
42
43
    /**
44
     * Attributs personnalisés pour les erreurs du validateur.
45
     */
46
    protected function attributes(): array
47
    {
48
        return [];
49
    }
50
51
    /**
52
     * Données à valider à partir de la demande.
53
     */
54
    protected function data(Request $request): array
55
    {
56
        if ($this->source === 'all') {
57
            return $request->all();
58
        }
59
60
        $sources = explode('|', $this->source);
61
        $data    = [];
62
63
        foreach ($sources as $source) {
64
            $data += match ($source) {
65
                'post'   => $request->post(),
66
                'get'    => $request->query(),
67
                'cookie' => $request->cookie(),
68
                default  => [],
69
            };
70
        }
71
72
        return $data;
73
    }
74
75
    /**
76
     * @internal
77
     */
78
    public function process(Request $request): Validation
79
    {
80
        $validation = new Validation();
81
82
        $validation->data($this->data($request));
83
        $validation->rules($this->rules());
84
        $validation->messages($this->messages());
85
        $validation->alias($this->attributes());
86
87
        return $validation;
88
    }
89
}
90