@@ -81,6 +81,32 @@ private function validateField(string $fieldName, mixed $value, FieldConfig $fie
8181 }
8282 break ;
8383
84+ case FieldType::FLOAT :
85+ if (!is_numeric ($ value )) {
86+ $ errors [] = "Field ' {$ fieldName }' must be a numeric value " ;
87+ } elseif (is_infinite ((float )$ value ) || is_nan ((float )$ value )) {
88+ $ errors [] = "Field ' {$ fieldName }' must be a finite numeric value " ;
89+ }
90+ break ;
91+
92+ case FieldType::INTEGER :
93+ if (!is_numeric ($ value )) {
94+ $ errors [] = "Field ' {$ fieldName }' must be a numeric value " ;
95+ } elseif (!is_int ($ value ) && !ctype_digit ((string )$ value )) {
96+ $ errors [] = "Field ' {$ fieldName }' must be an integer value " ;
97+ } elseif (is_string ($ value ) && (int )$ value != $ value ) {
98+ $ errors [] = "Field ' {$ fieldName }' must be an integer value " ;
99+ }
100+ break ;
101+
102+ case FieldType::DOUBLE :
103+ if (!is_numeric ($ value )) {
104+ $ errors [] = "Field ' {$ fieldName }' must be a numeric value " ;
105+ } elseif (is_infinite ((float )$ value ) || is_nan ((float )$ value )) {
106+ $ errors [] = "Field ' {$ fieldName }' must be a finite numeric value " ;
107+ }
108+ break ;
109+
84110 case FieldType::URL :
85111 if (!is_string ($ value ) || !filter_var ($ value , FILTER_VALIDATE_URL )) {
86112 $ errors [] = "Field ' {$ fieldName }' must be a valid URL " ;
@@ -115,6 +141,14 @@ private function validateField(string $fieldName, mixed $value, FieldConfig $fie
115141 $ errors = array_merge ($ errors , $ this ->validateVariants ($ fieldName , $ value , $ fieldConfig ));
116142 }
117143 break ;
144+
145+ case FieldType::NAME_VALUE_LIST :
146+ if (!is_array ($ value )) {
147+ $ errors [] = "Field ' {$ fieldName }' must be an array for name-value list type " ;
148+ } else {
149+ $ errors = array_merge ($ errors , $ this ->validateNameValueList ($ fieldName , $ value ));
150+ }
151+ break ;
118152 }
119153
120154 return $ errors ;
@@ -245,4 +279,36 @@ private function isValidImageUrl(string $url): bool
245279
246280 return in_array ($ extension , $ imageExtensions , true );
247281 }
282+
283+ /**
284+ * Validate name-value list structure
285+ *
286+ * @return array<string>
287+ */
288+ private function validateNameValueList (string $ fieldName , array $ nameValueList ): array
289+ {
290+ $ errors = [];
291+
292+ foreach ($ nameValueList as $ index => $ item ) {
293+ if (!is_array ($ item )) {
294+ $ errors [] = "Field ' {$ fieldName }' item at index {$ index } must be an object with 'name' and 'value' fields " ;
295+ continue ;
296+ }
297+
298+ // Validate required fields
299+ if (!isset ($ item ['name ' ])) {
300+ $ errors [] = "Field ' {$ fieldName }' item at index {$ index } must have a 'name' field " ;
301+ } elseif (!is_string ($ item ['name ' ]) || empty (trim ($ item ['name ' ]))) {
302+ $ errors [] = "Field ' {$ fieldName }' item at index {$ index } 'name' must be a non-empty string " ;
303+ }
304+
305+ if (!isset ($ item ['value ' ])) {
306+ $ errors [] = "Field ' {$ fieldName }' item at index {$ index } must have a 'value' field " ;
307+ } elseif (!is_string ($ item ['value ' ])) {
308+ $ errors [] = "Field ' {$ fieldName }' item at index {$ index } 'value' must be a string " ;
309+ }
310+ }
311+
312+ return $ errors ;
313+ }
248314}
0 commit comments