* @since 2.0 */ class RequestPanel extends Panel { /** * @inheritdoc */ public function getName() { return 'Request'; } /** * @inheritdoc */ public function getSummary() { return Yii::$app->view->render('panels/request/summary', ['panel' => $this]); } /** * @inheritdoc */ public function getDetail() { return Yii::$app->view->render('panels/request/detail', ['panel' => $this]); } /** * @inheritdoc */ public function save() { $headers = Yii::$app->getRequest()->getHeaders(); $requestHeaders = []; foreach ($headers as $name => $value) { if (is_array($value) && count($value) == 1) { $requestHeaders[$name] = current($value); } else { $requestHeaders[$name] = $value; } } $responseHeaders = []; foreach (headers_list() as $header) { if (($pos = strpos($header, ':')) !== false) { $name = substr($header, 0, $pos); $value = trim(substr($header, $pos + 1)); if (isset($responseHeaders[$name])) { if (!is_array($responseHeaders[$name])) { $responseHeaders[$name] = [$responseHeaders[$name], $value]; } else { $responseHeaders[$name][] = $value; } } else { $responseHeaders[$name] = $value; } } else { $responseHeaders[] = $header; } } if (Yii::$app->requestedAction) { if (Yii::$app->requestedAction instanceof InlineAction) { $action = get_class(Yii::$app->requestedAction->controller) . '::' . Yii::$app->requestedAction->actionMethod . '()'; } else { $action = get_class(Yii::$app->requestedAction) . '::run()'; } } else { $action = null; } return [ 'flashes' => $this->getFlashes(), 'statusCode' => Yii::$app->getResponse()->getStatusCode(), 'requestHeaders' => $requestHeaders, 'responseHeaders' => $responseHeaders, 'route' => Yii::$app->requestedAction ? Yii::$app->requestedAction->getUniqueId() : Yii::$app->requestedRoute, 'action' => $action, 'actionParams' => Yii::$app->requestedParams, 'requestBody' => Yii::$app->getRequest()->getRawBody() == '' ? [] : [ 'Content Type' => Yii::$app->getRequest()->getContentType(), 'Raw' => Yii::$app->getRequest()->getRawBody(), 'Decoded to Params' => Yii::$app->getRequest()->getBodyParams(), ], 'SERVER' => empty($_SERVER) ? [] : $_SERVER, 'GET' => empty($_GET) ? [] : $_GET, 'POST' => empty($_POST) ? [] : $_POST, 'COOKIE' => empty($_COOKIE) ? [] : $_COOKIE, 'FILES' => empty($_FILES) ? [] : $_FILES, 'SESSION' => empty($_SESSION) ? [] : $_SESSION, ]; } /** * Getting flash messages without deleting them or touching deletion counters * * @return array flash messages (key => message). */ protected function getFlashes() { /* @var $session \yii\web\Session */ $session = Yii::$app->has('session', true) ? Yii::$app->get('session') : null; if ($session === null || !$session->getIsActive()) { return []; } $counters = $session->get($session->flashParam, []); $flashes = []; foreach (array_keys($counters) as $key) { if (array_key_exists($key, $_SESSION)) { $flashes[$key] = $_SESSION[$key]; } } return $flashes; } }