Passed
Push — main ( a04a11...ed3749 )
by Dimitri
05:24
created

ErrorBag::line()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 7
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
eloc 3
c 1
b 0
f 0
nc 2
nop 3
dl 0
loc 7
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 Dimtrovich\Validation\ErrorBag as DimtrovichErrorBag;
15
16
class ErrorBag extends DimtrovichErrorBag
17
{
18
    /**
19
     * Obtenir des messages à partir d'une clé donnée, peut être utilisé dans un format personnalisé
20
     */
21
    public function get(string $key, string $format = ':message'): array
22
    {
23
        [$key, $ruleName] = $this->parsekey($key);
24
        $results          = [];
25
        if ($this->isWildcardKey($key)) {
26
            $messages = $this->filterMessagesForWildcardKey($key, $ruleName);
27
28
            foreach ($messages as $explicitKey => $keyMessages) {
29
                foreach ($keyMessages as $rule => $message) {
30
                    $results[$explicitKey][$rule] = $this->formatMessage($message, $format);
31
                }
32
            }
33
        } else {
34
            $keyMessages = $this->messages[$key] ?? [];
35
36
            foreach ((array) $keyMessages as $rule => $message) {
37
                if ($ruleName && $ruleName !== $rule) {
38
                    continue;
39
                }
40
                $results[$rule] = $this->formatMessage($message, $format);
41
            }
42
        }
43
44
        return $results;
45
    }
46
47
    /**
48
     * Obtenir tous les messages
49
     */
50
    public function all(string $format = ':message'): array
51
    {
52
        $messages = $this->messages;
53
54
        $results = [];
55
56
        foreach ($messages as $key => $keyMessages) {
57
            foreach ((array) $keyMessages as $message) {
58
                $results[] = $this->formatMessage($message, $format);
59
            }
60
        }
61
62
        return $results;
63
    }
64
65
    /**
66
     * Filtrer les messages avec une clé générique
67
     *
68
     * @param mixed|null $ruleName
69
     */
70
    protected function filterMessagesForWildcardKey(string $key, $ruleName = null): array
71
    {
72
        $messages = $this->messages;
73
        $pattern  = preg_quote($key, '#');
74
        $pattern  = str_replace('\*', '.*', $pattern);
75
76
        $filteredMessages = [];
77
78
        foreach ($messages as $k => $keyMessages) {
79
            if ((bool) preg_match('#^' . $pattern . '\z#u', $k) === false) {
80
                continue;
81
            }
82
83
            foreach ((array) $keyMessages as $rule => $message) {
84
                if ($ruleName && $rule !== $ruleName) {
85
                    continue;
86
                }
87
                $filteredMessages[$k][$rule] = $message;
88
            }
89
        }
90
91
        return $filteredMessages;
92
    }
93
}
94