示例#1
0
 /**
  * This function outputs the given $data as valid HAL+JSON to the client
  * and sets the HTTP Response Code to the given $statusCode.
  *
  * @param array|SlimBootstrap\DataObject $data       The data to output to
  *                                                   the client
  * @param int                            $statusCode The status code to set
  *                                                   in the reponse
  */
 public function write($data, $statusCode = 200)
 {
     $path = $this->_request->getPath();
     $hal = new hal\Hal($path);
     if (true === is_array($data)) {
         $pathData = explode('/', $path);
         unset($pathData[0]);
         $endpointName = end($pathData);
         $endpointUri = '/' . implode('/', $pathData) . '/';
         foreach ($data as $entry) {
             /** @var SlimBootstrap\DataObject $entry */
             $identifiers = $entry->getIdentifiers();
             $resourceName = $endpointUri . implode('/', array_values($identifiers));
             $resource = new hal\Hal($resourceName, $entry->getData() + $entry->getIdentifiers());
             $this->_addAdditionalLinks($resource, $entry->getLinks());
             $hal->addLink($endpointName, $resourceName);
             $hal->addResource($endpointName, $resource);
         }
     } else {
         $hal->setData($data->getData() + $data->getIdentifiers());
         $this->_addAdditionalLinks($hal, $data->getLinks());
     }
     $body = $this->_jsonEncode($hal);
     if (false === $body) {
         $this->_response->setStatus(500);
         $this->_response->setBody("Error encoding requested data.");
         return;
     }
     $this->_headers->set('Content-Type', 'application/hal+json; charset=UTF-8');
     $this->_response->setStatus($statusCode);
     $this->_response->setBody($hal->asJson());
 }
示例#2
0
 /**
  * Redirect
  *
  * This method prepares this response to return an HTTP Redirect response
  * to the HTTP client.
  *
  * @param string $url    The redirect destination
  * @param int    $status The redirect HTTP status code
  */
 public function redirect($url, $status = 302)
 {
     if (isset(\Slim\Slim::getInstance()->globalConfig['url'])) {
         $url = \Slim\Slim::getInstance()->globalConfig['url'] . $url;
     }
     $this->setStatus($status);
     $this->headers->set('Location', $url);
 }
 public function testSetArrayValue()
 {
     $h = new Headers();
     $h->set('Allow', ['GET', 'POST']);
     $prop = new ReflectionProperty($h, 'data');
     $prop->setAccessible(true);
     $this->assertTrue(is_array($prop->getValue($h)['allow']));
     $this->assertEquals(['GET', 'POST'], $prop->getValue($h)['allow']['value']);
 }
示例#4
0
 /**
  * @param DataObject $entry
  * @param int $statusCode   - default 200, is only set at first method call
  */
 public function writeToStream(SlimBootstrap\DataObject $entry, $statusCode = 200)
 {
     if (true === $this->_firstCall) {
         $this->_headers->set('Content-Type', 'text/csv; charset=UTF-8');
         $this->_response->setStatus($statusCode);
         echo $this->_determineHeadline(array($entry));
         $this->_firstCall = false;
     }
     echo $this->_buildCsvLineFromDataSet($entry->getData(), $this->_multidimensionalFields, $this->_lastFieldName, $this->_encloseAll) . $this->_linebreak;
     $this->_flush();
 }
 /**
  * Run before each test.
  */
 public function setUp()
 {
     $uri = Uri::createFromString('https://example.com:443/foo/bar');
     $headers = new Headers();
     $headers->set('REMOTE_ADDR', '127.0.0.1');
     $cookies = [];
     $env = Environment::mock();
     $serverParams = $env->all();
     $body = new Body(fopen('php://temp', 'r+'));
     $this->request = new Request('GET', $uri, $headers, $cookies, $serverParams, $body);
     $this->response = new Response();
 }
 /**
  * Setup for the XML POST requests.
  *
  * @param string $xml The XML to use to mock the body of the request.
  */
 public function setUpXmlPost($xml)
 {
     $uri = Uri::createFromString('https://example.com:443/foo');
     $headers = new Headers();
     $headers->set('Content-Type', 'application/xml;charset=utf8');
     $cookies = [];
     $env = Environment::mock(['SCRIPT_NAME' => '/index.php', 'REQUEST_URI' => '/foo', 'REQUEST_METHOD' => 'POST']);
     $serverParams = $env->all();
     $body = new RequestBody();
     $body->write($xml);
     $this->request = new Request('POST', $uri, $headers, $cookies, $serverParams, $body);
     $this->response = new Response();
 }
示例#7
0
 /**
  * This function outputs the given $data as valid JSON to the client
  * and sets the HTTP Response Code to the given $statusCode.
  *
  * @param array|SlimBootstrap\DataObject $data       The data to output to
  *                                                   the client
  * @param int                            $statusCode The status code to set
  *                                                   in the response
  */
 public function write($data, $statusCode = 200)
 {
     $result = array();
     if (true === is_array($data)) {
         foreach ($data as $entry) {
             /** @var SlimBootstrap\DataObject $entry */
             $identifiers = array_values($entry->getIdentifiers());
             $this->_buildStructure($entry, $identifiers, 0, $result);
         }
     } else {
         $identifiers = array_values($data->getIdentifiers());
         $this->_buildStructure($data, $identifiers, 0, $result);
     }
     $body = $this->_jsonEncode($result);
     if (false === $body) {
         $this->_response->setStatus(500);
         $this->_response->setBody("Error encoding requested data.");
         return;
     }
     $this->_headers->set('Content-Type', 'application/json; charset=UTF-8');
     $this->_response->setStatus($statusCode);
     $this->_response->setBody($body);
 }
 /**
  * Redirect
  *
  * This method prepares this response to return an HTTP Redirect response
  * to the HTTP client.
  *
  * @param string $url    The redirect destination
  * @param int    $status The redirect HTTP status code
  */
 public function redirect($url, $status = 302)
 {
     $this->setStatus($status);
     $this->headers->set('Location', $url);
 }
 public function testGetParsedBodyXmlWithTextXMLMediaType()
 {
     $method = 'GET';
     $uri = new Uri('https', 'example.com', 443, '/foo/bar', 'abc=123', '', '');
     $headers = new Headers();
     $headers->set('Content-Type', 'text/xml');
     $cookies = [];
     $serverParams = [];
     $body = new RequestBody();
     $body->write('<person><name>Josh</name></person>');
     $request = new Request($method, $uri, $headers, $cookies, $serverParams, $body);
     $this->assertEquals('Josh', $request->getParsedBody()->name);
 }