/** * @param int $code * @param array $data */ private function toJson($code, $data) { $this->response->header('Content-Type', 'application/json'); $this->response->status($code); if (defined('JSON_PRETTY_PRINT')) { $this->response->body(json_encode($data, JSON_PRETTY_PRINT)); } else { $this->response->body(json_encode($data)); } }
/** * @param int $statusCode * @param string $urlPath */ public function redirect($statusCode, $urlPath) { $urlPath = ltrim($urlPath, '/'); $baseUrl = $this->scheme . '://' . $this->host . '/' . $urlPath; $this->response->status($statusCode); $this->response->header('Location', $baseUrl); }
public function put($id) { $data = $this->getPayload(); $id_key = $this->model->getId(); $id_schema = $this->model->getSchema($id_key); if ($id_schema['type'] == 'id' && !$id instanceof \MongoId) { $id = new \MongoId($id); } $data[$id_key] = $id; try { $this->model->save($data); } catch (ValidationException $e) { $status = 400; $this->badRequest($e->getMessage(), $status); } catch (InvalidException $e) { $status = 405; // Method Not Allowed $this->badRequest($e->getMessage(), $status); } try { // The Deal instance already has all our settings. So, let's use // that instance to get them and inform the queue about them, // Then he use it to create connections/channels to the queue. He can // also pass along that config to workers who can then create their // own db connections which are needed for models, etc. $queue = new Queue($this->app->settings()); $queue->push(get_class($this->model), $id, 'put'); } catch (ValidationException $e) { $status = 400; $this->badRequest($e->getMessage(), $status); } $this->response->status(201); return $this->getSingular((string) $id); }
/** * @param \swoole_http_request $request * @param \swoole_http_response $response * @throws \Exception */ public function __invoke($request, $response) { $this->app->getContainer()['environment'] = $this->app->getContainer()->factory(function () { return new Environment($_SERVER); }); $this->app->getContainer()['request'] = $this->app->getContainer()->factory(function ($container) { return Request::createFromEnvironment($container['environment']); }); $this->app->getContainer()['response'] = $this->app->getContainer()->factory(function ($container) { $headers = new Headers(['Content-Type' => 'text/html']); $response = new Response(200, $headers); return $response->withProtocolVersion($container->get('settings')['httpVersion']); }); /** * @var ResponseInterface $appResponse */ $appResponse = $this->app->run(true); // set http header foreach ($appResponse->getHeaders() as $key => $value) { $filter_header = function ($header) { $filtered = str_replace('-', ' ', $header); $filtered = ucwords($filtered); return str_replace(' ', '-', $filtered); }; $name = $filter_header($key); foreach ($value as $v) { $response->header($name, $v); } } // set http status $response->status($appResponse->getStatusCode()); // send response to browser if (!$this->isEmptyResponse($appResponse)) { $body = $appResponse->getBody(); if ($body->isSeekable()) { $body->rewind(); } $settings = $this->app->getContainer()->get('settings'); $chunkSize = $settings['responseChunkSize']; $contentLength = $appResponse->getHeaderLine('Content-Length'); if (!$contentLength) { $contentLength = $body->getSize(); } $totalChunks = ceil($contentLength / $chunkSize); $lastChunkSize = $contentLength % $chunkSize; $currentChunk = 0; while (!$body->eof() && $currentChunk < $totalChunks) { if (++$currentChunk == $totalChunks && $lastChunkSize > 0) { $chunkSize = $lastChunkSize; } $response->write($body->read($chunkSize)); if (connection_status() != CONNECTION_NORMAL) { break; } } $response->end(); } }
/** * Set the HTTP response status code * @param int $status The HTTP response status code */ public function status($code) { $this->response->status($code); }
/** * convert array to json and parsing to body * @param $message * @param int $statusCode */ protected function writeToJSON($message, $statusCode = 200) { $this->response->status($statusCode); $this->response['Content-Type'] = 'application/json'; $this->response->body(json_encode($message)); }