/** * @Observe(event="kernel.view", priority=110) * {@inheritdoc} */ public function onKernelView(GetResponseForControllerResultEvent $event) { $request = $event->getRequest(); $request->getSession()->save(); if (!$request->attributes->has('_view')) { $configuration = new View([]); $configuration->setSerializerEnableMaxDepthChecks(true); $request->attributes->set('_view', $configuration); } }
/** * @dataProvider serializerEnableMaxDepthChecksProvider */ public function testSerializerEnableMaxDepthChecks($enableMaxDepthChecks, $expectedMaxDepth) { $this->createViewResponseListener(['json' => true]); $viewAnnotation = new ViewAnnotation([]); $viewAnnotation->setSerializerEnableMaxDepthChecks($enableMaxDepthChecks); $request = new Request(); $request->setRequestFormat('json'); $request->attributes->set('_view', $viewAnnotation); $this->templating->expects($this->any())->method('render')->will($this->returnValue('foo')); $view = new View(); $event = $this->getResponseEvent($request, $view); $this->listener->onKernelView($event); $context = $view->getSerializationContext(); $maxDepth = $context->getMaxDepth(); $this->assertEquals($expectedMaxDepth, $maxDepth); }
/** * @dataProvider serializerEnableMaxDepthChecksProvider */ public function testSerializerEnableMaxDepthChecks($enableMaxDepthChecks, $expectedMaxDepth) { $viewAnnotation = new ViewAnnotation([]); $viewAnnotation->setSerializerEnableMaxDepthChecks($enableMaxDepthChecks); $request = new Request(); $request->setRequestFormat('json'); $request->attributes->set('_view', $viewAnnotation); $this->viewHandler = new ViewHandler(['json' => true]); $this->viewHandler->setContainer($this->container); // This is why we avoid container dependencies! $that = $this; $this->container->expects($this->exactly(2))->method('get')->with($this->logicalOr('fos_rest.view_handler', 'fos_rest.templating'))->will($this->returnCallback(function ($service) use($that) { return $service === 'fos_rest.view_handler' ? $that->viewHandler : $that->templating; })); $this->templating->expects($this->any())->method('render')->will($this->returnValue('foo')); $view = new View(); $event = $this->getResponseEvent($request, $view); $this->listener->onKernelView($event); $context = $view->getSerializationContext(); $maxDepth = $context->getMaxDepth(); $this->assertEquals($expectedMaxDepth, $maxDepth); }