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());
 }
Exemple #3
0
 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']);
 }
Exemple #5
0
 /**
  * @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);
     }
 }
Exemple #7
0
 /**
  * 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();
 }