/** * @group 2463 */ public function testRecursesJsonModelChildrenWhenRendering() { $root = new JsonModel(array('foo' => 'bar')); $child1 = new JsonModel(array('foo' => 'bar')); $child2 = new JsonModel(array('foo' => 'bar')); $child1->setCaptureTo('child1'); $child2->setCaptureTo('child2'); $root->addChild($child1)->addChild($child2); $expected = array('foo' => 'bar', 'child1' => array('foo' => 'bar'), 'child2' => array('foo' => 'bar')); $test = $this->renderer->render($root); $this->assertEquals(json_encode($expected), $test); }
public function create($data) { $router = $this->serviceLocator->get('router'); $controllerLoader = $this->serviceLocator->get('controllerLoader'); foreach ($data as $key => $requestData) { $request = new Request(); $request->setMethod($requestData['method']); $request->setUri($requestData['uri']); $queryString = $request->getUri()->getQuery(); if ($queryString) { $query = []; parse_str($queryString, $query); $request->setQuery(new Parameters($query)); } if (isset($requestData['headers'])) { foreach ($requestData['headers'] as $name => $value) { $request->getHeaders()->addHeaderLine($name, $value); } } $request->getHeaders()->addHeaders([$this->request->getHeaders()->get('Accept'), $this->request->getHeaders()->get('Content-Type')]); if (isset($requestData['content'])) { $request->setContent(json_encode($requestData['content'])); } $response = new Response(); $event = new MvcEvent(); $event->setRequest($request); $event->setResponse($response); $match = $router->match($request); RouteListener::resolveController($match); $contentModel = null; if (!isset($match) || $match->getMatchedRouteName() != 'rest.' . $this->options->getManifestName()) { $contentModel = $this->createExceptionContentModel(new Exception\RuntimeException(sprintf('%s uri is not a rest route, so is not supported by batch controller.', $requestData['uri'])), $event); } else { try { $controller = $controllerLoader->get($match->getParam('controller')); } catch (\Zend\ServiceManager\Exception\ServiceNotFoundException $exception) { $contentModel = $this->createExceptionContentModel($exception, $event); $response->setStatusCode(404); } $event->setRouteMatch($match); $controller->setEvent($event); if (!isset($contentModel)) { try { $contentModel = $controller->dispatch($request, $response); } catch (\Exception $exception) { $contentModel = $this->createExceptionContentModel($exception, $event); } } } $headers = []; foreach ($response->getHeaders() as $header) { $headers[$header->getFieldName()] = $header->getFieldValue(); } $responseModel = new JsonModel(['status' => $response->getStatusCode(), 'headers' => $headers]); if ($contentModel instanceof ModelInterface) { $responseModel->addChild($contentModel, 'content'); } $this->model->addChild($responseModel, $key); } return $this->model; }