public function testCanMergeChildModelsWithoutCaptureToValues() { $this->renderer->setMergeUnnamedChildren(true); $root = new ViewModel(array('foo' => 'bar')); $child1 = new ViewModel(array('foo' => 'baz')); $child2 = new ViewModel(array('foo' => 'bar')); $child1->setCaptureTo(false); $child2->setCaptureTo('child2'); $root->addChild($child1)->addChild($child2); $expected = array('foo' => 'baz', 'child2' => array('foo' => 'bar')); $test = $this->renderer->render($root); $this->assertEquals(json_encode($expected), $test); }
/** * @param ViewEvent $e The ViewEvent instance * @return RendererInterface */ public function selectRenderer($e) { $request = $e->getRequest(); $headers = $request->getHeaders(); $model = $e->getModel(); // No Accept header? return PhpRenderer if (!$headers->has('accept')) { return $this->phpRenderer; } $accept = $headers->get('accept'); /* @var $mediaType \Zend\Http\Header\Accept\FieldValuePart\AcceptFieldValuePart */ foreach ($accept->getPrioritized() as $mediaType) { $mediaSubtype = $mediaType->getSubtype(); if ($mediaSubtype === 'json') { if (!$model instanceof JsonModel && ($children = $model->getChildrenByCaptureTo('content', false))) { $this->jsonRenderer->setMergeUnnamedChildren(true); foreach ($children as $child) { if (!$child instanceof JsonModel) { $child->setCaptureTo(null); } } } return $this->jsonRenderer; } if ($mediaSubtype === 'rss+xml' || $mediaSubtype === 'atom+xml') { $this->feedRenderer->setFeedType(substr($mediaSubtype, 0, strpos($mediaSubtype, '+'))); if (!$model instanceof FeedModel && ($children = $model->getChildrenByCaptureTo('content', false))) { foreach ($children as $child) { if (!$child instanceof FeedModel) { $child->setCaptureTo(null); } } } return $this->feedRenderer; } } // Nothing matched; return PhpRenderer. Technically, we should probably // return an HTTP 415 Unsupported response. return $this->phpRenderer; }