public function onDispatch(MvcEvent $e) { /** @var \BedRest\Rest\Dispatcher $dispatcher */ $dispatcher = $this->getServiceLocator()->get('BedRest.Dispatcher'); $data = $dispatcher->dispatch($this->restRequest); $result = new ViewModel($data); $result->setAccept($this->restRequest->getAccept()); $e->setResult($result); return $result; }
/** * Dispatches the request to BedRest. */ public function dispatchBedRest(array $options) { if (isset($options['method'])) { $this->_bedRestRequest->setMethod($options['method']); } $restManager = $this->_bedRest->getRestManager(); $this->_bedRestResponse = $restManager->process($this->_bedRestRequest); $response = $this->getResponse(); $response->setHttpResponseCode($this->_bedRestResponse->getStatusCode()); foreach ($this->_bedRestResponse->getHeaders() as $name => $value) { $response->setHeader($name, $value); } $response->setBody($this->_bedRestResponse->getRawBody()); }
public function testParameters() { $components = array('one' => 'valueOne', 'two' => 'valueTwo'); $this->request->setParameters($components); $this->assertEquals($components, $this->request->getParameters()); $this->assertEquals('valueOne', $this->request->getParameter('one')); $this->assertEquals('valueTwo', $this->request->getParameter('two')); $this->request->setParameter('three', 'valueThree'); $this->assertEquals('valueThree', $this->request->getParameter('three')); $this->request->setParameter('two', 'valueTwoModified'); $this->assertEquals('valueTwoModified', $this->request->getParameter('two')); }
/** * @dataProvider getCollectionRequest * * @param \BedRest\Rest\Request\Request $request */ public function testRestGetCollectionStart(Request $request) { $num = 2; $start = 1; $request->setParameter('start', $start); $event = new Event(); $event->setRequest($request); $this->service->restGetCollection($event); $data = $event->getData(); // test counts are correct $this->assertEquals($num, $data['num']); $this->assertEquals($num, count($data['items'])); $this->assertEquals(3, $data['total']); // test we started at the correct point $this->assertEquals(2, $data['items'][0]['id']); $this->assertEquals(3, $data['items'][1]['id']); }
/** * @dataProvider requests * * @param string $method */ public function testDispatchToNonExistentSubResourceThrows404Exception($method) { // configure the Dispatcher with the necessary dependencies $this->dispatcher->setResourceMetadataFactory($this->getMockResourceMetadataFactory()); $this->dispatcher->setServiceMetadataFactory($this->getMockServiceMetadataFactory($method)); $this->dispatcher->setServiceLocator($this->getMockServiceLocator()); $eventManager = $this->getMock('BedRest\\Events\\EventManager'); $this->dispatcher->setEventManager($eventManager); // form a basic request $request = new Request(); $request->setResource('testResource/nonExistentSub'); $request->setMethod($method); // test an exception is thrown $this->setExpectedException('BedRest\\Rest\\Exception', '', 404); $this->dispatcher->dispatch($request); }
/** * Negotiates the request payload. * * @param \BedRest\Rest\Request\Request $restRequest * @param \Zend\Http\Request $httpRequest * @param \Zend\ServiceManager\ServiceLocatorInterface $serviceLocator */ protected function negotiateContent(RestRequest $restRequest, HttpRequest $httpRequest, ServiceLocatorInterface $serviceLocator) { $content = $httpRequest->getContent(); $contentType = $httpRequest->getHeader('Content-Type'); if (!empty($content) && !empty($contentType)) { /** @var \BedRest\Content\Negotiation\Negotiator $negotiator */ $negotiator = $serviceLocator->get('BedRest.ContentNegotiator'); $restRequest->setContent($negotiator->decode($content, $contentType->value)); $restRequest->setContentType($contentType); } }
/** * Processes a REST request, returning a Response object. * * @param \BedRest\Rest\Request\Request $request * @throws \BedRest\Rest\Exception * @return \BedRest\Rest\Response\Response */ public function dispatch(Request $request) { // determine resource $resourceParts = explode('/', $request->getResource()); $resourceName = $resourceParts[0]; $subResourceName = false; if (count($resourceParts) > 1) { $subResourceName = $resourceParts[1]; } try { $resourceMetadata = $this->resourceMetadataFactory->getMetadataByResourceName($resourceName); } catch (ResourceMappingException $e) { throw Exception::resourceNotFound($resourceName, 404, $e); } // determine service if ($subResourceName) { if (!$resourceMetadata->hasSubResource($subResourceName)) { throw Exception::resourceNotFound($request->getResource()); } $subResourceMapping = $resourceMetadata->getSubResource($subResourceName); $service = $this->serviceLocator->get($subResourceMapping['service']); } else { $service = $this->serviceLocator->get($resourceMetadata->getService()); } $this->registerListeners($service); $event = new RequestEvent(); $event->setRequest($request); $this->eventManager->dispatch($request->getMethod(), $event); return $event->getData(); }