Passed
Push — master ( 566a3a...fbef46 )
by 世昌
02:19
created

CommonMiddleware::input()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 4
nc 2
nop 2
dl 0
loc 7
rs 10
c 0
b 0
f 0
1
<?php
2
namespace suda\database\middleware;
3
4
use Closure;
5
use function json_decode;
6
use function json_encode;
7
use function serialize;
8
use suda\framework\runnable\Runnable;
9
use function unserialize;
10
11
/**
12
 * 通用中间件
13
 */
14
class CommonMiddleware extends NullMiddleware
15
{
16
17
    /**
18
     * 注册中间件处理
19
     *
20
     * @var Runnable[]
21
     */
22
    protected $processor;
23
24
    /**
25
     * 设置某参数序列化
26
     *
27
     * @param string $name
28
     * @return CommonMiddleware
29
     */
30
    public function serializeIt(string $name): CommonMiddleware
31
    {
32
        $this->registerInput($name, [$this, 'inputSerialize']);
33
        $this->registerOutput($name, [$this, 'outputUnserialize']);
34
        return $this;
35
    }
36
37
    /**
38
     * 设置某参数序列化
39
     *
40
     * @param string $name
41
     * @return CommonMiddleware
42
     */
43
    public function jsonIt(string $name): CommonMiddleware
44
    {
45
        $this->registerInput($name, [$this, 'inputJson']);
46
        $this->registerOutput($name, [$this, 'outputJson']);
47
        return $this;
48
    }
49
50
    /**
51
     * 注册输入处理
52
     *
53
     * @param string $name
54
     * @param Runnable|Closure|array|string $runnable
55
     * @return CommonMiddleware
56
     */
57
    public function registerInput(string $name, $runnable): CommonMiddleware
58
    {
59
        $this->processor['input:'.$name] = $runnable;
60
        return $this;
61
    }
62
63
    /**
64
     * 输出数据处理
65
     *
66
     * @param string $name
67
     * @param Runnable|Closure|array|string $runnable
68
     * @return CommonMiddleware
69
     */
70
    public function registerOutput(string $name, $runnable): CommonMiddleware
71
    {
72
        $this->processor['output:'.$name] = $runnable;
73
        return $this;
74
    }
75
76
    /**
77
     * 输入名处理
78
     *
79
     * @param Runnable|Closure|array|string $runnable
80
     * @return CommonMiddleware
81
     */
82
    public function registerInputName($runnable): CommonMiddleware
83
    {
84
        $this->processor['input-name'] = $runnable;
85
        return $this;
86
    }
87
88
    /**
89
     * 输出名处理
90
     *
91
     * @param Runnable|Closure|array|string $runnable
92
     * @return CommonMiddleware
93
     */
94
    public function registerOutputName($runnable): CommonMiddleware
95
    {
96
        $this->processor['output-name'] = $runnable;
97
        return $this;
98
    }
99
100
    /**
101
     * 输出字段处理
102
     *
103
     * @param Runnable|Closure|array|string $runnable
104
     * @return CommonMiddleware
105
     */
106
    public function registerRow($runnable): CommonMiddleware
107
    {
108
        $this->processor['output-row'] = $runnable;
109
        return $this;
110
    }
111
112
113
    /**
114
     * 处理输入数据
115
     *
116
     * @param string $name
117
     * @param mixed $data
118
     * @return mixed
119
     */
120
    public function input(string $name, $data)
121
    {
122
        $key = 'input:'.$name;
123
        if (array_key_exists($key, $this->processor)) {
124
            return (new Runnable($this->processor[$key]))($data);
125
        }
126
        return $data;
127
    }
128
129
    /**
130
     * 处理输出数据
131
     *
132
     * @param string $name
133
     * @param mixed $data
134
     * @return mixed
135
     */
136
    public function output(string $name, $data)
137
    {
138
        $key = 'output:'.$name;
139
        if (array_key_exists($key, $this->processor)) {
140
            return (new Runnable($this->processor[$key]))($data);
141
        }
142
        return $data;
143
    }
144
145
    /**
146
     * 对输出列进行处理
147
     *
148
     * @param mixed $row
149
     * @return mixed
150
     */
151
    public function outputRow($row)
152
    {
153
        $key = 'output-row';
154
        if (array_key_exists($key, $this->processor)) {
155
            return (new Runnable($this->processor[$key]))($row);
156
        }
157
        return $row;
158
    }
159
160
    /**
161
     * 输入参数名
162
     *
163
     * @param string $name
164
     * @return string
165
     */
166
    public function inputName(string $name):string
167
    {
168
        $key = 'input-name';
169
        if (array_key_exists($key, $this->processor)) {
170
            return (new Runnable($this->processor[$key]))($name);
171
        }
172
        return $name;
173
    }
174
175
    /**
176
     * 输出参数名
177
     *
178
     * @param string $name
179
     * @return string
180
     */
181
    public function outputName(string $name):string
182
    {
183
        $key = 'output-name';
184
        if (array_key_exists($key, $this->processor)) {
185
            return (new Runnable($this->processor[$key]))($name);
186
        }
187
        return $name;
188
    }
189
190
    /**
191
     * 序列化
192
     *
193
     * @param mixed $data
194
     * @return string
195
     */
196
    private function inputSerialize($data)
197
    {
198
        return $data === null? $data : serialize($data);
199
    }
200
201
    /**
202
     * 序列化
203
     *
204
     * @param mixed $data
205
     * @return mixed
206
     */
207
    private function outputUnserialize($data)
208
    {
209
        return unserialize($data) ?: null;
210
    }
211
212
    /**
213
     * 序列化
214
     *
215
     * @param mixed $data
216
     * @return string
217
     */
218
    private function inputJson($data)
219
    {
220
        return $data === null? $data : json_encode($data);
221
    }
222
223
    /**
224
     * 序列化
225
     *
226
     * @param mixed $data
227
     * @return mixed
228
     */
229
    private function outputJson($data)
230
    {
231
        return json_decode($data) ?: null;
232
    }
233
}
234