ResponseHandler::formatHttpStatusCode()   A
last analyzed

Complexity

Conditions 6
Paths 5

Size

Total Lines 23
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 6
eloc 17
c 1
b 0
f 0
nc 5
nop 1
dl 0
loc 23
rs 9.0777
1
<?php
2
3
namespace app\core\components;
4
5
use yii\web\Response;
6
7
class ResponseHandler
8
{
9
    public $event;
10
    public $successMessage;
11
12
    /**
13
     * 返回数据统一处理
14
     */
15
    public function formatResponse()
16
    {
17
        $response = $this->event->sender;
18
        if ($response->data !== null) {
19
            if (isset($response->data['code']) && isset($response->data['message'])) {
20
                $response->data = [
21
                    'code' => $response->data['code'] ?: $response->statusCode,
22
                    'data' => isset($response->data['data']) ? $response->data['data'] : null,
23
                    'message' => $response->data['message'],
24
                ];
25
            } elseif ($response->format != 'html' && !isset($response->data['message'])) {
26
                $response->data = [
27
                    'code' => 0,
28
                    'data' => $response->data,
29
                    'message' => $this->successMessage ?: \Yii::t('app', 'Success Message'),
30
                ];
31
            } elseif ((!empty($response->data['message'])) && !isset($response->data['code'])) {
32
                $message = $response->data['message'];
33
                unset($response->data['message']);
34
                $response->data = [
35
                    'code' => 0,
36
                    'data' => isset($response->data[0]) ? $response->data[0] : $response->data,
37
                    'message' => $message,
38
                ];
39
            }
40
        }
41
        $this->formatHttpStatusCode($response);
42
    }
43
44
    public function formatHttpStatusCode(Response $response)
45
    {
46
        switch ($response->statusCode) {
47
            case 404:
48
                $response->data['code'] = 404;
49
                break;
50
            case 204:
51
                if (\Yii::$app->request->isDelete) {
52
                    $response->data['code'] = 0;
53
                    $response->data['data'] = null;
54
                    $response->data['message'] = $this->successMessage ?: \Yii::t('app', 'Success Message');
55
                }
56
                break;
57
            case 422:
58
                $response->data['code'] = 422;
59
                $response->data['message'] = current($response->data['data'])['message'];
60
                break;
61
            default:
62
                # code...
63
                break;
64
        }
65
66
        $response->setStatusCode(200);
67
    }
68
}
69