/** * 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()); }
/** * 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']); }
/** * @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(); }
/** * 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); }