Test Failed
Push — main ( 312655...ea0faa )
by Dimitri
03:17
created

DataValidation::__get()   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 1
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
	 * Parametres supplementaires transmis pour aider à la validation des données
32
	 *
33
	 * Par exemple, on peut spécifier (au niveau du contrôleur) l'ID à ignorer pour la règle `unique`.
34
	 *
35
	 * @var array<string,mixed>
36
	 *
37
	 * @internal N'est pas destiné à être utilisé ou modifié par le développeur
38
	 */
39
	protected array $params = [];
40
41
    /**
42
     * Regles de validation
43
     */
44
    abstract protected function rules(): array;
45
46
    /**
47
     * Messages personnalisés pour les erreurs du validateur.
48
     */
49
    protected function messages(): array
50
    {
51
        return [];
52
    }
53
54
    /**
55
     * Attributs personnalisés pour les erreurs du validateur.
56
     */
57
    protected function attributes(): array
58
    {
59
        return [];
60
    }
61
62
    /**
63
     * Données à valider à partir de la demande.
64
     */
65
    protected function data(Request $request): array
66
    {
67
        if ($this->source === 'all') {
68
            return $request->all();
69
        }
70
71
        $sources = explode('|', $this->source);
72
        $data    = [];
73
74
        foreach ($sources as $source) {
75
            $data += match ($source) {
76
                'post'   => $request->post(),
77
                'get'    => $request->query(),
78
                'cookie' => $request->cookie(),
79
                default  => [],
80
            };
81
        }
82
83
        return $data;
84
    }
85
86
    /**
87
     * @internal
88
	 *
89
	 * @param array<string,mixed> $params Parametres supplementaires transmis pour aider à la validation des données
90
     */
91
    public function process(Request $request, array $params = []): Validation
92
    {
93
		$this->params = $params;
94
95
        $validation = new Validation();
96
97
        $validation->data($this->data($request));
98
        $validation->rules($this->rules());
99
        $validation->messages($this->messages());
100
        $validation->alias($this->attributes());
101
102
        return $validation;
103
    }
104
105
	/**
106
	 * Getter magic pour acceder aux paramètres supplementaires de validation
107
	 *
108
	 * @return mixed
109
	 */
110
	public function __get($name)
111
	{
112
		return $this->params[$name] ?? null;
113
	}
114
}
115