@@ -107,6 +107,18 @@ private function getRouteRules($route)
107107 return [];
108108 }
109109
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+
110122 /**
111123 * @param $rule
112124 * @param $attributeData
@@ -121,43 +133,114 @@ protected function parseRule($rule, &$attributeData)
121133 case 'required ' :
122134 $ attributeData ['required ' ] = true ;
123135 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 ;
124152 case 'in ' :
125- $ attributeData ['description ' ][] = implode ( ' or ' , $ parameters );
153+ $ attributeData ['description ' ][] = $ this -> fancy_implode ( $ parameters , ' , ' , ' or ' );
126154 break ;
127155 case 'not_in ' :
128- $ attributeData ['description ' ][] = 'Not in: ' . implode ( ' or ' , $ parameters );
156+ $ attributeData ['description ' ][] = 'Not in: ' . $ this -> fancy_implode ( $ parameters , ' , ' , ' or ' );
129157 break ;
130158 case 'min ' :
159+ $ attributeData ['type ' ] = 'numeric ' ;
131160 $ attributeData ['description ' ][] = 'Minimum: ` ' . $ parameters [0 ] . '` ' ;
132161 break ;
133162 case 'max ' :
163+ $ attributeData ['type ' ] = 'numeric ' ;
134164 $ attributeData ['description ' ][] = 'Maximum: ` ' . $ parameters [0 ] . '` ' ;
135165 break ;
136166 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 ])) . '` ' ;
138173 break ;
139174 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. ' ;
141195 break ;
142196 case 'mimetypes ' :
143197 case 'mimes ' :
144- $ attributeData ['description ' ][] = 'Allowed mime types: ' . implode ( ', ' , $ parameters );
198+ $ attributeData ['description ' ][] = 'Allowed mime types: ' . $ this -> fancy_implode ( $ parameters , ', ' , ' or ' );
145199 break ;
146200 case 'required_if ' :
147201 $ attributeData ['description ' ][] = 'Required if ` ' . $ parameters [0 ] . '` is ` ' . $ parameters [1 ] . '` ' ;
148202 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 ;
149227 case 'exists ' :
150228 $ attributeData ['description ' ][] = 'Valid ' . Str::singular ($ parameters [0 ]) . ' ' . $ parameters [1 ];
151229 break ;
152230 case 'active_url ' :
153231 $ attributeData ['type ' ] = 'url ' ;
154232 break ;
233+ case 'regex ' :
234+ $ attributeData ['type ' ] = 'string ' ;
235+ $ attributeData ['description ' ][] = 'Must match this regular expression: ` ' . $ parameters [0 ] . '` ' ;
236+ break ;
155237 case 'boolean ' :
238+ case 'array ' :
239+ case 'date ' :
156240 case 'email ' :
157241 case 'image ' :
158242 case 'string ' :
159243 case 'integer ' :
160- case 'json ' :
161244 case 'numeric ' :
162245 case 'url ' :
163246 case 'ip ' :
0 commit comments