@@ -26,58 +26,132 @@ public function count()
26
26
return count ($ this ->all ());
27
27
}
28
28
29
- public function first ($ key )
29
+ public function has ($ key )
30
30
{
31
- if (empty ($ this ->messages [$ key ])) return null ;
32
- return array_values ($ this ->messages [$ key ])[0 ];
31
+ list ($ key , $ ruleName ) = $ this ->parsekey ($ key );
32
+ if ($ this ->isWildcardKey ($ key )) {
33
+ $ messages = $ this ->filterMessagesForWildcardKey ($ key , $ ruleName );
34
+ return count (Helper::arrayDot ($ messages )) > 0 ;
35
+ } else {
36
+ $ messages = isset ($ this ->messages [$ key ])? $ this ->messages [$ key ] : null ;
37
+
38
+ if (!$ ruleName ) {
39
+ return !empty ($ messages );
40
+ } else {
41
+ return !empty ($ messages ) AND isset ($ messages [$ ruleName ]);
42
+ }
43
+ }
33
44
}
34
45
35
- public function last ($ key )
46
+ public function first ($ key )
36
47
{
37
- if (empty ($ this ->messages [$ key ])) return null ;
38
- return array_values ($ this ->messages [$ key ])[count ($ this ->messages [$ key ])-1 ];
48
+ list ($ key , $ ruleName ) = $ this ->parsekey ($ key );
49
+ if ($ this ->isWildcardKey ($ key )) {
50
+ $ messages = $ this ->filterMessagesForWildcardKey ($ key , $ ruleName );
51
+ $ flattenMessages = Helper::arrayDot ($ messages );
52
+ return array_shift ($ flattenMessages );
53
+ } else {
54
+ $ keyMessages = isset ($ this ->messages [$ key ])? $ this ->messages [$ key ] : [];
55
+
56
+ if (empty ($ keyMessages )) {
57
+ return null ;
58
+ }
59
+
60
+ if ($ ruleName ) {
61
+ return isset ($ keyMessages [$ ruleName ])? $ keyMessages [$ ruleName ] : null ;
62
+ } else {
63
+ return array_shift ($ keyMessages );
64
+ }
65
+ }
39
66
}
40
67
41
- public function get ($ key , $ rule )
68
+ public function get ($ key , $ format = ' :message ' )
42
69
{
43
- if (empty ($ this ->messages [$ key ])) return null ;
44
- if (empty ($ this ->messages [$ key ][$ rule ])) return null ;
45
- return $ this ->messages [$ key ][$ rule ];
70
+ list ($ key , $ ruleName ) = $ this ->parsekey ($ key );
71
+ $ results = [];
72
+ if ($ this ->isWildcardKey ($ key )) {
73
+ $ messages = $ this ->filterMessagesForWildcardKey ($ key , $ ruleName );
74
+ foreach ($ messages as $ explicitKey => $ keyMessages ) {
75
+ foreach ($ keyMessages as $ rule => $ message ) {
76
+ $ results [$ explicitKey ][$ rule ] = $ this ->formatMessage ($ message , $ format );
77
+ }
78
+ }
79
+ } else {
80
+ $ keyMessages = isset ($ this ->messages [$ key ])? $ this ->messages [$ key ] : [];
81
+ foreach ($ keyMessages as $ rule => $ message ) {
82
+ if ($ ruleName AND $ ruleName != $ rule ) continue ;
83
+ $ results [$ rule ] = $ this ->formatMessage ($ message , $ format );
84
+ }
85
+ }
86
+
87
+ return $ results ;
46
88
}
47
89
48
90
public function all ($ format = ':message ' )
49
91
{
50
- $ messages = [];
51
- foreach ($ this ->messages as $ key => $ keyMessages ) {
52
- foreach ($ keyMessages as $ msg ) {
53
- $ messages [] = str_replace (':message ' , $ format , $ msg );
92
+ $ messages = $ this ->messages ;
93
+ $ results = [];
94
+ foreach ($ messages as $ key => $ keyMessages ) {
95
+ foreach ($ keyMessages as $ message ) {
96
+ $ results [] = $ this ->formatMessage ($ message , $ format );
54
97
}
55
98
}
99
+ return $ results ;
100
+ }
101
+
102
+ public function firstOfAll ($ format = ':message ' )
103
+ {
104
+ $ messages = $ this ->messages ;
105
+ $ results = [];
106
+ foreach ($ messages as $ key => $ keyMessages ) {
107
+ $ results [] = $ this ->formatMessage (array_shift ($ messages [$ key ]), $ format );
108
+ }
109
+ return $ results ;
110
+ }
56
111
57
- return $ messages ;
112
+ public function toArray ()
113
+ {
114
+ return $ this ->messages ;
58
115
}
59
116
60
- public function implode ( $ glue , $ format = ' :message ' )
117
+ protected function parseKey ( $ key )
61
118
{
62
- return implode ($ glue , $ this ->all ($ format ));
119
+ $ expl = explode (': ' , $ key , 2 );
120
+ $ key = $ expl [0 ];
121
+ $ ruleName = isset ($ expl [1 ])? $ expl [1 ] : null ;
122
+ return [$ key , $ ruleName ];
63
123
}
64
124
65
- public function firstOfAll ( )
125
+ protected function isWildcardKey ( $ key )
66
126
{
67
- $ messages = [];
68
- foreach ($ this ->messages as $ key => $ keyMessages ) {
69
- $ messages [] = $ this ->first ($ key );
70
- }
71
- return $ messages ;
127
+ return false !== strpos ($ key , '* ' );
72
128
}
73
129
74
- public function lastOfAll ( )
130
+ protected function filterMessagesForWildcardKey ( $ key , $ ruleName = null )
75
131
{
76
- $ messages = [];
77
- foreach ($ this ->messages as $ key => $ keyMessages ) {
78
- $ messages [] = $ this ->last ($ key );
132
+ $ messages = $ this ->messages ;
133
+ $ pattern = preg_quote ($ key , '# ' );
134
+ $ pattern = str_replace ('\* ' , '.* ' , $ pattern );
135
+
136
+ $ filteredMessages = [];
137
+
138
+ foreach ($ messages as $ k => $ keyMessages ) {
139
+ if ((bool ) preg_match ('#^ ' .$ pattern .'\z#u ' , $ k ) === false ) {
140
+ continue ;
141
+ }
142
+
143
+ foreach ($ keyMessages as $ rule => $ message ) {
144
+ if ($ ruleName AND $ rule != $ ruleName ) continue ;
145
+ $ filteredMessages [$ k ][$ rule ] = $ message ;
146
+ }
79
147
}
80
- return $ messages ;
148
+
149
+ return $ filteredMessages ;
150
+ }
151
+
152
+ protected function formatMessage ($ message , $ format )
153
+ {
154
+ return str_replace (':message ' , $ message , $ format );
81
155
}
82
156
83
- }
157
+ }
0 commit comments