Search code examples
zend-framework2zend-view

Access parent view's variable from child view in Zend Framework 2


I'm using ZF2's View component as standalone for my project like this:

$renderer = new PhpRenderer;
$resolver = new Resolver\AggregateResolver();
$stack = new Resolver\TemplatePathStack(array(
    'script_paths' => array(
        __DIR__ . '/view'
    )
));
$resolver->attach($stack);
$renderer->setResolver($resolver);

$model1 = new ViewModel;
$model1->setTemplate('template1');
$model1->setVariable('key', 'value');

$model2 = new ViewModel;
$model2->setTemplate('template2');

$model1->addChild($model2, 'child');

echo $renderer->render($model1);

It works like charm. The child renders in model1. But the problem is, how can i access model1's variable key in model2?


Solution

  • You can use the Zend\View\Helper\ViewModel to access a common root view model, and possibly traverse the whole view model tree from that.

    Just set the root itself:

    // right after you instantiated $model1
    $modelHelper = $renderer->plugin('view_model');
    $modelHelper->setRoot($model1);
    

    And now $this->viewModel()->getRoot() will return $model1 in every view template.

    You can peek at how this is dealt with by default in Zend\Mvc\View\Http\ViewManager