· 5 years ago · Jun 24, 2020, 04:16 AM
1<?php
2
3class Form{
4 protected $input = [];
5 protected $requirement = [];
6 protected $has_error = false;
7 protected $errors = [];
8 // fungsi response yang dipanggil pada auth.php
9 // fungsi ini memberikan respon berupa json
10 public function response($number=0,$string="",$response=[]){
11 if($this->has_error){
12 echo json_encode([
13 'error'=>$number,
14 'message'=>$this->errors[0]['message'],
15 'details'=>$response
16 ]);
17 }
18 else{
19 echo json_encode([
20 'error'=>$number,
21 'message'=>$string,
22 'details'=>[$response]
23 ]);
24 }
25 }
26 // fungsi run adalah fungsi utama untuk memvalidasi inputan pada api
27 public function run($input = [], $requirement = [], callable $callback){
28 $this->input = $input;
29 $this->requirement = $requirement;
30 $this->validate();
31 if($this->has_error){
32 return $callback([]);
33 }
34 else{
35 return $callback([
36 'email'=>$this->input['email'],
37 'id'=>1
38 ]);
39 }
40 }
41 // fungsi validate akan melooping field yg ingin di validasi serta memanggil fungsi rule_to_function
42 protected function validate(){
43 foreach($this->requirement as $key => $value ){
44 $this->rule_to_function($value,$key,$this->input[$key]);
45 }
46 }
47 // fungsi rule_to_function untuk memanggil fungsi dari validasi dari rule/requirement yang diberikan pada setiap field
48 protected function rule_to_function($rule,$key,$val){
49 // rule berupa string dengan delimiter ',' lalu split_rule akan memecah setiap string tersebut ke dalam array
50 $rule = $this->split_rule($rule);
51 foreach($rule as $value){
52 if(strpos($value,'min') !== false){
53 $substr = substr($value,strlen("min"),strlen($value));
54 call_user_func("self::min",$val,$key,(int)$substr);
55 }
56 else if(strpos($value,'max') !== false){
57 $substr = substr($value,strlen("max"),strlen($value));
58 call_user_func("self::max",$val,$key,(int)$substr);
59 }
60 else{
61 call_user_func("self::".$value,$val,$key);
62 }
63 }
64 }
65 protected function split_rule($rule){
66 return explode(',',$rule);
67 }
68 // mengecek panjang dari string apakah sesuai dengan nilai max
69 protected function max($val,$key,$length){
70 if(strlen($val)>$length){
71 $this->has_error = true;
72 array_push($this->errors,[
73 'rule' =>'max',
74 'message'=>"$key maximum $length karakter",
75 ]);
76 }
77 }
78 // mengecek panjang dari string apakah sesuai dengan nilai min
79 protected function min($val,$key,$length){
80 if(strlen($val) < $length){
81 $this->has_error = true;
82 array_push($this->errors,[
83 'rule' =>'min',
84 'message'=>"$key minimum $length karakter",
85 ]);
86 }
87 }
88 // mengecek field data yg tidak boleh kosong
89 protected function required($string,$key){
90 if(empty($string) || $string == null){
91 $this->has_error = true;
92 array_push($this->errors,[
93 'rule' =>'required',
94 'message'=>"$key wajib diisi",
95 ]);
96 }
97 }
98 // mengecek data dari field adalah string dalam bentuk email
99 protected function email($val,$key){
100 if(!filter_var($val,FILTER_VALIDATE_EMAIL)){
101 $this->has_error = true;
102 array_push($this->errors,[
103 'rule' =>'email',
104 'message'=>"Alamat $key harus valid",
105 ]);
106 }
107 }
108}
109
110?>