Esempio n. 1
0
 /**
  * @param ViewHandler   $handler
  * @param View          $view
  * @param Request       $request
  *
  * @return \Symfony\Component\HttpFoundation\Response
  */
 public function createResponse(ViewHandler $handler, View $view, Request $request)
 {
     $format = $view->getFormat() ?: $request->getRequestFormat();
     $data = $view->getData();
     if ($data instanceof Cursor) {
         $view->setData(iterator_to_array($data, false));
         $view->getResponse()->headers->set('X-Total-Count', $data->count());
         return $handler->createResponse($view, $request, $view->getFormat());
     }
     if ($data instanceof Form && Codes::HTTP_BAD_REQUEST === $view->getStatusCode()) {
         $view->setData($this->formatFormErrors($data));
         return $handler->createResponse($view, $request, $format);
     }
     return $handler->createResponse($view, $request, $format);
 }
 /**
  * @param ViewHandler $viewHandler
  * @param View $view
  * @param Request $request
  * @param string $format
  *
  * @return Response
  */
 public function handleExtension(ViewHandler $handler, View $view, Request $request, $format)
 {
     if (in_array("application/vnd.bpi.api+xml", $request->getAcceptableContentTypes())) {
         $view->setHeader("Content-Type", "application/vnd.bpi.api+xml");
     }
     return $handler->createResponse($view, $request, "xml");
 }
Esempio n. 3
0
 /**
  * Deserialize Hal object using Nocarrier's Hal library instead of using JMS Serializer
  * 
  * @param ViewHandler $viewHandler
  * @param View $view
  * @param Request $request
  * @param string $format
  *
  * @return Response
  */
 public function createResponse(ViewHandler $handler, View $view, Request $request, $format)
 {
     $hal = $view->getData();
     //if not hal object process it with default view handler
     if (!$hal instanceof Hal) {
         return $handler->createResponse($view, $request, $format);
     }
     switch ($format) {
         case 'json':
             $content = $hal->asJson();
             break;
         case 'xml':
             $content = $hal->asXml();
             break;
         default:
             throw new HttpException(500, 'Custom HalViewHandler is misconfigured. Formats for deserializing HAL objects should be json or xml.');
     }
     $response = $view->getResponse();
     $response->setContent($content);
     $response->setStatusCode($this->getStatusCode($view));
     if (!$response->headers->has('Content-Type')) {
         $response->headers->set('Content-Type', $request->getMimeType($format));
     }
     return $response;
 }
Esempio n. 4
0
 /**
  * Handles wrapping a JSON response into a JSONP response.
  *
  * @param ViewHandler $handler
  * @param View        $view
  * @param Request     $request
  * @param string      $format
  *
  * @return Response
  */
 public function createResponse(ViewHandler $handler, View $view, Request $request, $format)
 {
     $response = $handler->createResponse($view, $request, 'json');
     if ($response->isSuccessful()) {
         $callback = $this->getCallback($request);
         $response->setContent(sprintf('/**/%s(%s)', $callback, $response->getContent()));
         $response->headers->set('Content-Type', $request->getMimeType($format));
     }
     return $response;
 }
Esempio n. 5
0
 /**
  * @param ViewHandler $viewHandler
  * @param View $view
  * @param Request $request
  * @param string $format
  *
  * @return Response
  */
 public function createResponse(ViewHandler $handler, View $view, Request $request, $format)
 {
     $format = $request->get('_format') ?: 'json';
     if ($view->getData() instanceof ImageInterface && $format != 'json') {
         $image = $view->getData();
         $content = $this->manager->getImageSource($image);
         $headers = ['Content-Type' => $image->getMimeType()];
         return new Response($content, 200, $headers);
     }
     return $handler->createResponse($view, $request, 'json');
 }
 /**
  * @dataProvider createSerializeNullDataProvider
  */
 public function testSerializeNull($expected, $serializeNull)
 {
     $viewHandler = new ViewHandler(array('json' => false), 404, 200, $serializeNull);
     $container = $this->getMock('\\Symfony\\Component\\DependencyInjection\\Container', array('get', 'getParameter'));
     $viewHandler->setContainer($container);
     $serializer = $this->getMockBuilder('\\JMS\\Serializer\\Serializer')->setMethods(array('serialize', 'setExclusionStrategy'))->disableOriginalConstructor()->getMock();
     if ($serializeNull) {
         $serializer->expects($this->once())->method('serialize')->will($this->returnValue(json_encode(null)));
         $container->expects($this->once())->method('get')->with('fos_rest.serializer')->will($this->returnValue($serializer));
     } else {
         $serializer->expects($this->never())->method('serialize');
         $container->expects($this->never())->method('get');
     }
     $response = $viewHandler->createResponse(new View(), new Request(), 'json');
     $this->assertEquals($expected, $response->getContent());
 }
Esempio n. 7
0
 /**
  * @dataProvider createResponseWithoutLocationDataProvider
  */
 public function testCreateResponseWithoutLocation($format, $expected, $createViewCalls = 0, $formIsValid = false, $form = false)
 {
     $viewHandler = new ViewHandler(array('html' => true, 'json' => false));
     $container = $this->getMock('\\Symfony\\Component\\DependencyInjection\\Container', array('get', 'getParameter'));
     if ('html' === $format) {
         $templating = $this->getMockBuilder('\\Symfony\\Bundle\\FrameworkBundle\\Templating\\PhpEngine')->setMethods(array('render'))->disableOriginalConstructor()->getMock();
         $templating->expects($this->once())->method('render')->will($this->returnValue(var_export($expected, true)));
         $container->expects($this->once())->method('get')->with('fos_rest.templating')->will($this->returnValue($templating));
     } else {
         $serializer = $this->getMock('\\stdClass', array('serialize', 'setVersion'));
         $serializer->expects($this->once())->method('serialize')->will($this->returnValue(var_export($expected, true)));
         $serializer->expects($this->once())->method('setVersion')->will($this->returnValue('1.0'));
         $container->expects($this->once())->method('get')->with('fos_rest.serializer')->will($this->returnValue($serializer));
         $container->expects($this->any())->method('getParameter')->will($this->onConsecutiveCalls('version', '1.0'));
     }
     $viewHandler->setContainer($container);
     if ($form) {
         $data = $this->getMock('\\Symfony\\Component\\Form\\Form', array('createView', 'getData', 'isValid'), array(), '', false);
         $data->expects($this->exactly($createViewCalls))->method('createView')->will($this->returnValue(array('bla' => 'toto')));
         $data->expects($this->exactly($createViewCalls))->method('getData')->will($this->returnValue(array('bla' => 'toto')));
         $data->expects($this->any())->method('isValid')->will($this->returnValue($formIsValid));
     } else {
         $data = array('foo' => 'bar');
     }
     $view = new View($data);
     $response = $viewHandler->createResponse($view, new Request(), $format);
     $this->assertEquals(var_export($expected, true), $response->getContent());
 }
Esempio n. 8
0
 /**
  * @dataProvider exceptionWrapperSerializeResponseContentProvider
  * @param string $format
  */
 public function testCreateResponseWithFormErrorsAndSerializationGroups($format)
 {
     $form = Forms::createFormFactory()->createBuilder()->add('name', 'text')->add('description', 'text')->getForm();
     $form->get('name')->addError(new FormError('Invalid name'));
     $exceptionWrapper = new ExceptionWrapper(array('status_code' => 400, 'message' => 'Validation Failed', 'errors' => $form));
     $view = new View($exceptionWrapper);
     $view->getSerializationContext()->setGroups(array('Custom'));
     $wrapperHandler = new ExceptionWrapperSerializeHandler();
     $translatorMock = $this->getMock('Symfony\\Component\\Translation\\TranslatorInterface', array('trans', 'transChoice', 'setLocale', 'getLocale'));
     $translatorMock->expects($this->any())->method('trans')->will($this->returnArgument(0));
     $formErrorHandler = new FormErrorHandler($translatorMock);
     $serializer = SerializerBuilder::create()->configureHandlers(function (HandlerRegistry $handlerRegistry) use($wrapperHandler, $formErrorHandler) {
         $handlerRegistry->registerSubscribingHandler($wrapperHandler);
         $handlerRegistry->registerSubscribingHandler($formErrorHandler);
     })->build();
     $container = $this->getMock('Symfony\\Component\\DependencyInjection\\Container', array('get'));
     $container->expects($this->once())->method('get')->with('fos_rest.serializer')->will($this->returnValue($serializer));
     $viewHandler = new ViewHandler(array());
     $viewHandler->setContainer($container);
     $response = $viewHandler->createResponse($view, new Request(), $format);
     $serializer2 = SerializerBuilder::create()->configureHandlers(function (HandlerRegistry $handlerRegistry) use($wrapperHandler, $formErrorHandler) {
         $handlerRegistry->registerSubscribingHandler($formErrorHandler);
     })->build();
     $container2 = $this->getMock('Symfony\\Component\\DependencyInjection\\Container', array('get'));
     $container2->expects($this->once())->method('get')->with('fos_rest.serializer')->will($this->returnValue($serializer2));
     $viewHandler = new ViewHandler(array());
     $viewHandler->setContainer($container2);
     $view2 = new View($exceptionWrapper);
     $response2 = $viewHandler->createResponse($view2, new Request(), $format);
     $this->assertEquals($response->getContent(), $response2->getContent());
 }
Esempio n. 9
0
 /**
  * @dataProvider exceptionWrapperSerializeResponseContentProvider
  *
  * @param string $format
  */
 public function testCreateResponseWithFormErrorsAndSerializationGroups($format)
 {
     $form = Forms::createFormFactory()->createBuilder()->add('name', 'text')->add('description', 'text')->getForm();
     $form->get('name')->addError(new FormError('Invalid name'));
     $exceptionWrapper = new ExceptionWrapper(['status_code' => 400, 'message' => 'Validation Failed', 'errors' => $form]);
     $view = new View($exceptionWrapper);
     $view->getSerializationContext()->addGroups(['Custom']);
     $wrapperHandler = new ExceptionWrapperSerializeHandler();
     $translatorMock = $this->getMock('Symfony\\Component\\Translation\\TranslatorInterface', ['trans', 'transChoice', 'setLocale', 'getLocale']);
     $translatorMock->expects($this->any())->method('trans')->will($this->returnArgument(0));
     $formErrorHandler = new FormErrorHandler($translatorMock);
     $serializer = SerializerBuilder::create()->configureHandlers(function (HandlerRegistry $handlerRegistry) use($wrapperHandler, $formErrorHandler) {
         $handlerRegistry->registerSubscribingHandler($wrapperHandler);
         $handlerRegistry->registerSubscribingHandler($formErrorHandler);
     })->build();
     $adapter = $this->getMock('FOS\\RestBundle\\Context\\Adapter\\SerializationContextAdapterInterface');
     $container = $this->getMock('Symfony\\Component\\DependencyInjection\\Container', ['get']);
     $container->expects($this->any())->method('get')->with($this->logicalOr($this->equalTo('fos_rest.serializer'), $this->equalTo('fos_rest.context.adapter.chain_context_adapter')))->will($this->returnCallback(function ($method) use($serializer, $adapter) {
         switch ($method) {
             case 'fos_rest.serializer':
                 return $serializer;
             case 'fos_rest.context.adapter.chain_context_adapter':
                 return $adapter;
         }
     }));
     $viewHandler = new ViewHandler([]);
     $viewHandler->setSerializationContextAdapter($this->getMock('FOS\\RestBundle\\Context\\Adapter\\SerializationContextAdapterInterface'));
     $viewHandler->setContainer($container);
     $response = $viewHandler->createResponse($view, new Request(), $format);
     $serializer2 = SerializerBuilder::create()->configureHandlers(function (HandlerRegistry $handlerRegistry) use($wrapperHandler, $formErrorHandler) {
         $handlerRegistry->registerSubscribingHandler($formErrorHandler);
     })->build();
     $container2 = $this->getMock('Symfony\\Component\\DependencyInjection\\Container', ['get']);
     $container2->expects($this->any())->method('get')->with($this->logicalOr($this->equalTo('fos_rest.serializer'), $this->equalTo('fos_rest.context.adapter.chain_context_adapter')))->will($this->returnCallback(function ($method) use($serializer2, $adapter) {
         switch ($method) {
             case 'fos_rest.serializer':
                 return $serializer2;
             case 'fos_rest.context.adapter.chain_context_adapter':
                 return $adapter;
         }
     }));
     $viewHandler = new ViewHandler([]);
     $viewHandler->setSerializationContextAdapter($this->getMock('FOS\\RestBundle\\Context\\Adapter\\SerializationContextAdapterInterface'));
     $viewHandler->setContainer($container2);
     $view2 = new View($exceptionWrapper);
     $response2 = $viewHandler->createResponse($view2, new Request(), $format);
     $this->assertEquals($response->getContent(), $response2->getContent());
 }