/**
  *
  * @param ViewModel $viewModel
  */
 private function extractCacheTags(ViewModel $viewModel)
 {
     if ($viewModel->getOption('esi') && !$viewModel->terminate()) {
         return;
     }
     $tags = (array) $viewModel->getOption(self::OPTION_CACHE_TAGS, []);
     $this->cacheTags = ArrayUtils::merge($this->cacheTags, $tags);
     if ($viewModel->hasChildren()) {
         foreach ($viewModel->getChildren() as $childViewModel) {
             $this->extractCacheTags($childViewModel);
         }
     }
 }
예제 #2
0
 public function testAddChildAllowsSpecifyingCaptureToValue()
 {
     $model = new ViewModel();
     $child = new ViewModel();
     $model->addChild($child, 'foo');
     $this->assertTrue($model->hasChildren());
     $this->assertEquals('foo', $child->captureTo());
 }
예제 #3
0
 /**
  * Renders template childrens.
  * Inspired on Zend\View\View implementation to recursively render child models
  * @param ViewModel $model
  * @see Zend\View\View::renderChildren
  */
 protected function renderChildren(ViewModel $model)
 {
     if (!$model->hasChildren()) {
         return;
     }
     /* @var ViewModel $child */
     foreach ($model as $child) {
         $capture = $child->captureTo();
         if (!empty($capture)) {
             // Recursively render children
             $this->renderChildren($child);
             $result = $this->renderer->render($child);
             if ($child->isAppend()) {
                 $oldResult = $model->{$capture};
                 $model->setVariable($capture, $oldResult . $result);
             } else {
                 $model->setVariable($capture, $result);
             }
         }
     }
 }
예제 #4
0
 /**
  * 
  * @param string|ViewModel $nameOrModel
  * @param mixed $values
  * @return string
  * @throws DomainException
  */
 public function renderStrategyExtend($nameOrModel, $values = null)
 {
     $model = null;
     if ($nameOrModel->hasChildren()) {
         foreach ($nameOrModel as $child) {
             if ($child->captureTo() == 'content') {
                 $model = $child;
                 break;
             }
         }
     }
     if (!$model) {
         $model = $nameOrModel;
     }
     $template = $this->resolver->resolve($model->getTemplate(), $this);
     return $template->render((array) $model->getVariables());
 }