Completed
Push — master ( 87bb9d...5b715d )
by monster
02:02
created

ApiPanel::getName()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 0
loc 4
ccs 0
cts 2
cp 0
rs 10
cc 1
eloc 2
nc 1
nop 0
crap 2
1
<?php
2
3
namespace zacksleo\yii2\debug\panels;
4
5
use yii;
6
use yii\debug\Panel;
7
use yii\base\InlineAction;
8
9
class ApiPanel extends Panel
10
{
11
    /**
12
     * @inheritdoc
13
     */
14
    public function getName()
15
    {
16
        return 'API调试';
17
    }
18
19
    /**
20
     * @inheritdoc
21
     */
22
    public function getSummary()
23
    {
24
        return Yii::$app->view->render('@vendor/zacksleo/yii2-api-debug-panel/src/views/summary', ['panel' => $this]);
25
    }
26
27
    /**
28
     * @inheritdoc
29
     */
30
    public function getDetail()
31
    {
32
        return Yii::$app->view->render('@vendor/zacksleo/yii2-api-debug-panel/src/views/detail', ['panel' => $this]);
33
    }
34
35
    /**
36
     * @inheritdoc
37
     */
38
    public function save()
39
    {
40
        $headers = Yii::$app->getRequest()->getHeaders();
41
        $requestHeaders = [];
42
        foreach ($headers as $name => $value) {
43
            if (is_array($value) && count($value) == 1) {
44
                $requestHeaders[$name] = current($value);
45
            } else {
46
                $requestHeaders[$name] = $value;
47
            }
48
        }
49
50
        $responseHeaders = [];
51
        foreach (headers_list() as $header) {
52
            if (($pos = strpos($header, ':')) !== false) {
53
                $name = substr($header, 0, $pos);
54
                $value = trim(substr($header, $pos + 1));
55
                if (isset($responseHeaders[$name])) {
56
                    if (!is_array($responseHeaders[$name])) {
57
                        $responseHeaders[$name] = [$responseHeaders[$name], $value];
58
                    } else {
59
                        $responseHeaders[$name][] = $value;
60
                    }
61
                } else {
62
                    $responseHeaders[$name] = $value;
63
                }
64
            } else {
65
                $responseHeaders[] = $header;
66
            }
67
        }
68
        if (Yii::$app->requestedAction) {
69
            if (Yii::$app->requestedAction instanceof InlineAction) {
70
                $action = get_class(Yii::$app->requestedAction->controller) . '::' . Yii::$app->requestedAction->actionMethod . '()';
71
            } else {
72
                $action = get_class(Yii::$app->requestedAction) . '::run()';
73
            }
74
        } else {
75
            $action = null;
76
        }
77
        unset($requestHeaders['cookie'], $requestHeaders['dnt'], $requestHeaders['cache-control'], $requestHeaders['postman-token']);
78
        unset($requestHeaders['connection'], $requestHeaders['content-length'], $requestHeaders['origin'], $requestHeaders['user-agent'], $requestHeaders['host']);
79
        unset($requestHeaders['accept-encoding']);
80
        unset($responseHeaders['X-Powered-By'], $responseHeaders['X-Author'], $responseHeaders['X-Debug-Tag'], $responseHeaders['Access-Control-Allow-Origin']);
81
        unset($responseHeaders['Access-Control-Expose-Headers']);
82
        return [
83
            'statusCode' => Yii::$app->getResponse()->getStatusCode(),
84
            'requestHeaders' => $requestHeaders,
85
            'responseHeaders' => $responseHeaders,
86
            'route' => Yii::$app->requestedAction ? Yii::$app->requestedAction->getUniqueId() : Yii::$app->requestedRoute,
87
            'action' => $action,
88
            'actionParams' => Yii::$app->requestedParams,
89
            'requestBody' => Yii::$app->getRequest()->getRawBody() == '' ? [] : [
90
                'Content Type' => Yii::$app->getRequest()->getContentType(),
91
                'Decoded to Params' => Yii::$app->getRequest()->getBodyParams(),
92
            ],
93
            'FILES' => empty($_FILES) ? [] : $_FILES,
94
            'RESPONSE' => Yii::$app->response->data,
95
            'SERVER' => empty($_SERVER) ? [] : $_SERVER,
96
        ];
97
    }
98
}
99