Passed
Push — main ( 073c01...b49c3d )
by Dimitri
03:21
created

ErrorBag::all()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 11
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 6
c 0
b 0
f 0
nc 3
nop 1
dl 0
loc 11
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 Rakit\Validation\ErrorBag as RakitErrorBag;
15
16
class ErrorBag extends RakitErrorBag
17
{
18
    /**
19
     * Renvoie les erreurs de validation d'une cle sous forme de chaine
20
     */
21
    public function line(string $key, string $separator = ', ', string $format = ':message'): ?string
22
    {
23
        if ([] === $errors = $this->get($key, $format)) {
24
            return null;
25
        }
26
27
        return join($separator, $errors);
28
    }
29
30
    /**
31
     * Get messages from given key, can be use custom format
32
     *
33
     */
34
    public function get(string $key, string $format = ':message'): array
35
    {
36
        list($key, $ruleName) = $this->parsekey($key);
37
        $results = [];
38
        if ($this->isWildcardKey($key)) {
39
            $messages = $this->filterMessagesForWildcardKey($key, $ruleName);
40
            foreach ($messages as $explicitKey => $keyMessages) {
41
                foreach ($keyMessages as $rule => $message) {
42
                    $results[$explicitKey][$rule] = $this->formatMessage($message, $format);
43
                }
44
            }
45
        } else {
46
            $keyMessages = isset($this->messages[$key])? $this->messages[$key] : [];
47
            foreach ((array) $keyMessages as $rule => $message) {
48
                if ($ruleName and $ruleName != $rule) {
49
                    continue;
50
                }
51
                $results[$rule] = $this->formatMessage($message, $format);
52
            }
53
        }
54
55
        return $results;
56
    }
57
58
    /**
59
     * Get all messages
60
     */
61
    public function all(string $format = ':message'): array
62
    {
63
        $messages = $this->messages;
64
65
        $results = [];
66
        foreach ($messages as $key => $keyMessages) {
67
            foreach ((array) $keyMessages as $message) {
68
                $results[] = $this->formatMessage($message, $format);
69
            }
70
        }
71
        return $results;
72
    }
73
74
    /**
75
     * Filter messages with wildcard key
76
     */
77
    protected function filterMessagesForWildcardKey(string $key, $ruleName = null): array
78
    {
79
        $messages = $this->messages;
80
        $pattern = preg_quote($key, '#');
81
        $pattern = str_replace('\*', '.*', $pattern);
82
83
        $filteredMessages = [];
84
85
        foreach ($messages as $k => $keyMessages) {
86
            if ((bool) preg_match('#^'.$pattern.'\z#u', $k) === false) {
87
                continue;
88
            }
89
90
            foreach ((array) $keyMessages as $rule => $message) {
91
                if ($ruleName and $rule != $ruleName) {
92
                    continue;
93
                }
94
                $filteredMessages[$k][$rule] = $message;
95
            }
96
        }
97
98
        return $filteredMessages;
99
    }
100
}
101