Test Failed
Push — master ( c85321...9ad08e )
by 世昌
02:06
created

CommonMiddleware::outputJson()   A

Complexity

Conditions 2
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

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