Skip to content

Commit e0f444f

Browse files
Bug fixes
1 parent eccbd14 commit e0f444f

1 file changed

Lines changed: 69 additions & 18 deletions

File tree

src/Validator.php

Lines changed: 69 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ public function validate($data, $multiple_data=false) : bool {
100100
} else if((is_array($data) ? false : is_array(json_decode($data, true)))) {
101101
$data = json_decode($data, true);
102102
} else if(!is_array($data)) {
103-
$this->errors['error'] = 'Invalid data for validation';
103+
$this->errors['error'] = 'Error : Invalid data for validation';
104104
return false;
105105
}
106106

@@ -109,34 +109,83 @@ public function validate($data, $multiple_data=false) : bool {
109109
if(is_array($rules)) {
110110
foreach($rules as $rule => $value) {
111111
$rule = strtolower($rule);
112+
//Check rule is valid or not
112113
if(in_array($rule, $this->predefined_rules)) {
113114
$func = "validate_".$rule;
114115
//Validate multiple data
115116
if($multiple_data === true) {
116117
foreach($data as $single_data) {
117118
if(is_array($single_data)) {
118-
if($this->$func($single_data, $data_key, $rules) === false) {
119-
$is_valid = false;
120-
break;
119+
//Check data key is array or not
120+
if(strpos($data_key, '.')) {
121+
$data_keys = explode('.', $data_key);
122+
$tmp_data_key = $data_keys[count($data_keys)-1];
123+
array_pop($data_keys);
124+
$tmp_single_data = NULL;
125+
foreach($data_keys as $key) {
126+
if($tmp_single_data === NULL) {
127+
$tmp_single_data = isset($single_data[$key]) ? $single_data[$key] : NULL;
128+
} else {
129+
$tmp_single_data = isset($tmp_single_data[$key]) ? $tmp_single_data[$key] : NULL;
130+
}
131+
}
132+
if(!is_array($tmp_single_data)) {
133+
$tmp_single_data = array();
134+
}
135+
//Validate data
136+
if($this->$func($tmp_single_data, $tmp_data_key, $rules, $data_key) === false) {
137+
$is_valid = false;
138+
break;
139+
}
140+
} else {
141+
//Validate data
142+
if($this->$func($single_data, $data_key, $rules) === false) {
143+
$is_valid = false;
144+
break;
145+
}
121146
}
122147
} else {
123-
$this->errors['error'] = 'Invalid data for validation';
148+
$this->errors['error'] = 'Error : Invalid data for validation';
124149
return false;
125150
}
126151
}
127152
} else {
128-
if($this->$func($data, $data_key, $rules) === false) {
129-
$is_valid = false;
130-
break;
153+
//Check data key is array or not
154+
if(strpos($data_key, '.')) {
155+
$data_keys = explode('.', $data_key);
156+
$tmp_data_key = $data_keys[count($data_keys)-1];
157+
array_pop($data_keys);
158+
$tmp_data = NULL;
159+
foreach($data_keys as $key) {
160+
if($tmp_data === NULL) {
161+
$tmp_data = isset($data[$key]) ? $data[$key] : NULL;
162+
} else {
163+
$tmp_data = isset($tmp_data[$key]) ? $tmp_data[$key] : NULL;
164+
}
165+
}
166+
if(!is_array($tmp_data)) {
167+
$tmp_data = array();
168+
}
169+
//Validate data
170+
if($this->$func($tmp_data, $tmp_data_key, $rules, $data_key) === false) {
171+
$is_valid = false;
172+
break;
173+
}
174+
} else {
175+
//Validate data
176+
if($this->$func($data, $data_key, $rules) === false) {
177+
$is_valid = false;
178+
break;
179+
}
131180
}
132181
}
133182
} else {
134-
$this->errors['error'] = 'Invalid rules for validation';
183+
$this->errors['error'] = 'Error : Invalid rules for validation';
135184
return false;
136185
}
137186
}
138187
} else {
139-
$this->errors['error'] = 'Invalid rules for validation';
188+
$this->errors['error'] = 'Error : Invalid rules for validation';
140189
return false;
141190
}
142191
}
@@ -310,18 +359,19 @@ private function set_error(string $data_key, array $rules, string $rule, $custom
310359
* @param array $data
311360
* @param string $data_key
312361
* @param array $rules
362+
* @param string $message_key
313363
* @return boolean
314364
*/
315-
private function validate_required(array $data, string $data_key, array $rules) : bool {
365+
private function validate_required(array $data, string $data_key, array $rules, string $message_key = NULL) : bool {
316366
if(!isset($rules['file']) || $rules['file'] === false) {
317367
if((!array_key_exists($data_key, $data) && $rules['required'] === true)) {
318-
$this->set_error($data_key, $rules, 'required');
368+
$this->set_error(($message_key === NULL? $data_key : $message_key), $rules, 'required');
319369
return false;
320370
} else {
321371
return true;
322372
}
323373
} else if((!isset($_FILES[$data_key]) && $rules['required'] === true && $rules['file'] === true) || (isset($_FILES[$data_key]) && empty($_FILES[$data_key]) && $_FILES[$data_key] !== 0 && $rules['required'] === true && $rules['file'] === true)) {
324-
$this->set_error($data_key, $rules, 'required');
374+
$this->set_error(($message_key === NULL? $data_key : $message_key), $rules, 'required');
325375
return false;
326376
} else {
327377
return true;
@@ -334,14 +384,15 @@ private function validate_required(array $data, string $data_key, array $rules)
334384
* @param array $data
335385
* @param string $data_key
336386
* @param array $rules
387+
* @param string $message_key
337388
* @return boolean
338389
*/
339-
private function validate_null(array $data, string $data_key, array $rules) : bool {
340-
if(array_key_exists($key, $data) && !empty($data[$data_key]) && $data[$data_key] !== 0 && $data[$data_key] !== false && $rules['null'] === true) {
341-
$this->set_error($data_key, $rules, 'null');
390+
private function validate_null(array $data, string $data_key, array $rules, string $message_key = NULL) : bool {
391+
if(array_key_exists($data_key, $data) && !empty($data[$data_key]) && $data[$data_key] !== 0 && $data[$data_key] !== false && $rules['null'] === true) {
392+
$this->set_error(($message_key === NULL? $data_key : $message_key), $rules, 'null');
342393
return false;
343-
} else if(array_key_exists($key, $data) && empty($data[$data_key]) && $data[$data_key] !== 0 && $data[$data_key] !== false && $rules['null'] === false) {
344-
$this->set_error($data_key, $rules, 'null');
394+
} else if(array_key_exists($data_key, $data) && empty($data[$data_key]) && $data[$data_key] !== 0 && $data[$data_key] !== false && $rules['null'] === false) {
395+
$this->set_error(($message_key === NULL? $data_key : $message_key), $rules, 'null');
345396
return false;
346397
} else {
347398
return true;

0 commit comments

Comments
 (0)