1 <?php
2 3 4 5 6 7
8
9 namespace Skimia\ApiFusion\Domain\Validation;
10
11
12 class Bindings {
13
14 15 16
17 private $rules;
18
19 20 21
22 private $delimiters = array('{', '}');
23
24 25 26 27 28 29 30
31 public function __construct($args, $rules)
32 {
33 $this->rules = $rules;
34 $bindings = $this->prepare($args);
35
36 if (count($bindings)) {
37 $this->replace($bindings);
38 }
39 }
40
41 42 43 44 45 46 47
48 public static function make($args, $rules)
49 {
50 return new static($args, $rules);
51 }
52
53 54 55 56 57 58
59 public function rules()
60 {
61 return $this->rules;
62 }
63
64 65 66 67 68 69
70 private function prepare($args)
71 {
72 $bindings = array();
73
74
75 if (count($args) == 2) {
76 $bindings[$args[0]] = $args[1];
77 }
78
79 elseif (is_array($args[0])) {
80 $bindings = $args[0];
81 }
82
83 return $bindings;
84 }
85
86 87 88 89 90 91
92 private function replace($bindings)
93 {
94
95 foreach($bindings as $k=>$binding){
96 if(is_array($binding))
97 unset($bindings[$k]);
98 }
99
100 $search = array_keys($bindings);
101 $replace = array_values($bindings);
102
103 foreach ($search as $key => &$value) {
104 $value = $this->delimiters[0].$value.$this->delimiters[1];
105 }
106
107 array_walk_recursive($this->rules, function(&$value, $key) use($search, $replace) {
108 $value = str_ireplace($search, $replace, $value);
109 });
110 }
111
112 }