Exemple #1
0
 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);
 }
Exemple #2
0
 /**
  * @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;
 }