Exemplo n.º 1
1
 /**
  * @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));
     }
 }
Exemplo n.º 2
0
 /**
  * @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);
 }
Exemplo n.º 3
0
 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);
 }
Exemplo n.º 4
0
 /**
  * @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();
     }
 }
Exemplo n.º 5
0
 /**
  * Set the HTTP response status code
  * @param  int      $status     The HTTP response status code
  */
 public function status($code)
 {
     $this->response->status($code);
 }
Exemplo n.º 6
0
 /**
  * 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));
 }