@@ -107,6 +107,18 @@ private function getRouteRules($route)
107
107
return [];
108
108
}
109
109
110
+ /**
111
+ * @param $arr
112
+ * @param $first
113
+ * @param $last
114
+ * @return string
115
+ */
116
+ protected function fancy_implode ($ arr , $ first , $ last )
117
+ {
118
+ array_push ($ arr , implode ($ last , array_splice ($ arr , -2 )));
119
+ return implode ($ first , $ arr );
120
+ }
121
+
110
122
/**
111
123
* @param $rule
112
124
* @param $attributeData
@@ -121,43 +133,114 @@ protected function parseRule($rule, &$attributeData)
121
133
case 'required ' :
122
134
$ attributeData ['required ' ] = true ;
123
135
break ;
136
+ case 'accepted ' :
137
+ $ attributeData ['type ' ] = 'boolean ' ;
138
+ break ;
139
+ case 'after ' :
140
+ $ attributeData ['type ' ] = 'date ' ;
141
+ $ attributeData ['description ' ][] = 'Must be a date after: ` ' . date (DATE_RFC850 , strtotime ($ parameters [0 ])) . '` ' ;
142
+ break ;
143
+ case 'alpha ' :
144
+ $ attributeData ['description ' ][] = 'Only alphabetic characters allowed ' ;
145
+ break ;
146
+ case 'alpha_dash ' :
147
+ $ attributeData ['description ' ][] = 'Allowed: alpha-numeric characters, as well as dashes and underscores. ' ;
148
+ break ;
149
+ case 'alpha_num ' :
150
+ $ attributeData ['description ' ][] = 'Only alpha-numeric characters allowed ' ;
151
+ break ;
124
152
case 'in ' :
125
- $ attributeData ['description ' ][] = implode ( ' or ' , $ parameters );
153
+ $ attributeData ['description ' ][] = $ this -> fancy_implode ( $ parameters , ' , ' , ' or ' );
126
154
break ;
127
155
case 'not_in ' :
128
- $ attributeData ['description ' ][] = 'Not in: ' . implode ( ' or ' , $ parameters );
156
+ $ attributeData ['description ' ][] = 'Not in: ' . $ this -> fancy_implode ( $ parameters , ' , ' , ' or ' );
129
157
break ;
130
158
case 'min ' :
159
+ $ attributeData ['type ' ] = 'numeric ' ;
131
160
$ attributeData ['description ' ][] = 'Minimum: ` ' . $ parameters [0 ] . '` ' ;
132
161
break ;
133
162
case 'max ' :
163
+ $ attributeData ['type ' ] = 'numeric ' ;
134
164
$ attributeData ['description ' ][] = 'Maximum: ` ' . $ parameters [0 ] . '` ' ;
135
165
break ;
136
166
case 'between ' :
137
- $ attributeData ['description ' ][] = 'Between: ` ' . $ parameters [0 ] . '` and ' . $ parameters [1 ];
167
+ $ attributeData ['type ' ] = 'numeric ' ;
168
+ $ attributeData ['description ' ][] = 'Between: ` ' . $ parameters [0 ] . '` and ` ' . $ parameters [1 ] . '` ' ;
169
+ break ;
170
+ case 'before ' :
171
+ $ attributeData ['type ' ] = 'date ' ;
172
+ $ attributeData ['description ' ][] = 'Must be a date preceding: ` ' . date (DATE_RFC850 , strtotime ($ parameters [0 ])) . '` ' ;
138
173
break ;
139
174
case 'date_format ' :
140
- $ attributeData ['description ' ][] = 'Date format: ' . $ parameters [0 ];
175
+ $ attributeData ['type ' ] = 'date ' ;
176
+ $ attributeData ['description ' ][] = 'Date format: ` ' . $ parameters [0 ] . '` ' ;
177
+ break ;
178
+ case 'different ' :
179
+ $ attributeData ['description ' ][] = 'Must have a different value than parameter: ` ' . $ parameters [0 ] . '` ' ;
180
+ break ;
181
+ case 'digits ' :
182
+ $ attributeData ['type ' ] = 'numeric ' ;
183
+ $ attributeData ['description ' ][] = 'Must have an exact length of ` ' . $ parameters [0 ] . '` ' ;
184
+ break ;
185
+ case 'digits_between ' :
186
+ $ attributeData ['type ' ] = 'numeric ' ;
187
+ $ attributeData ['description ' ][] = 'Must have a length between ` ' . $ parameters [0 ] . '` and ` ' . $ parameters [1 ] . '` ' ;
188
+ break ;
189
+ case 'image ' :
190
+ $ attributeData ['description ' ][] = 'Must be an image (jpeg, png, bmp, gif, or svg) ' ;
191
+ break ;
192
+ case 'json ' :
193
+ $ attributeData ['type ' ] = 'string ' ;
194
+ $ attributeData ['description ' ][] = 'Must be a valid JSON string. ' ;
141
195
break ;
142
196
case 'mimetypes ' :
143
197
case 'mimes ' :
144
- $ attributeData ['description ' ][] = 'Allowed mime types: ' . implode ( ', ' , $ parameters );
198
+ $ attributeData ['description ' ][] = 'Allowed mime types: ' . $ this -> fancy_implode ( $ parameters , ', ' , ' or ' );
145
199
break ;
146
200
case 'required_if ' :
147
201
$ attributeData ['description ' ][] = 'Required if ` ' . $ parameters [0 ] . '` is ` ' . $ parameters [1 ] . '` ' ;
148
202
break ;
203
+ case 'required_unless ' :
204
+ $ attributeData ['description ' ][] = 'Required unless ` ' . $ parameters [0 ] . '` is ` ' . $ parameters [1 ] . '` ' ;
205
+ break ;
206
+ case 'required_with ' :
207
+ $ attributeData ['description ' ][] = 'Required if the parameters ' . $ this ->fancy_implode ($ parameters , ', ' , ' or ' ) . ' are present. ' ;
208
+ break ;
209
+ case 'required_with_all ' :
210
+ $ attributeData ['description ' ][] = 'Required if the parameters ' . $ this ->fancy_implode ($ parameters , ', ' , ' and ' ) . ' are present. ' ;
211
+ break ;
212
+ case 'required_without ' :
213
+ $ attributeData ['description ' ][] = 'Required if the parameters ' . $ this ->fancy_implode ($ parameters , ', ' , ' or ' ) . ' are not present. ' ;
214
+ break ;
215
+ case 'required_without_all ' :
216
+ $ attributeData ['description ' ][] = 'Required if the parameters ' . $ this ->fancy_implode ($ parameters , ', ' , ' and ' ) . ' are not present. ' ;
217
+ break ;
218
+ case 'same ' :
219
+ $ attributeData ['description ' ][] = 'Must be the same as ` ' . $ parameters [0 ] . '` ' ;
220
+ break ;
221
+ case 'size ' :
222
+ $ attributeData ['description ' ][] = 'Must have the size of ` ' . $ parameters [0 ] . '` ' ;
223
+ break ;
224
+ case 'timezone ' :
225
+ $ attributeData ['description ' ][] = 'Must be a valid timezone identifier ' ;
226
+ break ;
149
227
case 'exists ' :
150
228
$ attributeData ['description ' ][] = 'Valid ' . Str::singular ($ parameters [0 ]) . ' ' . $ parameters [1 ];
151
229
break ;
152
230
case 'active_url ' :
153
231
$ attributeData ['type ' ] = 'url ' ;
154
232
break ;
233
+ case 'regex ' :
234
+ $ attributeData ['type ' ] = 'string ' ;
235
+ $ attributeData ['description ' ][] = 'Must match this regular expression: ` ' . $ parameters [0 ] . '` ' ;
236
+ break ;
155
237
case 'boolean ' :
238
+ case 'array ' :
239
+ case 'date ' :
156
240
case 'email ' :
157
241
case 'image ' :
158
242
case 'string ' :
159
243
case 'integer ' :
160
- case 'json ' :
161
244
case 'numeric ' :
162
245
case 'url ' :
163
246
case 'ip ' :
0 commit comments