Подключение переменных к разным представлениям

Zend Framework 2. Подключение переменных представления Access view variables in another view model (http://akrabat.com/zend-framework-2/access-view-variables-in-another-vie...)
Подобно Zend Framework 1, слой просмотра (view layer) в Zend Framework 2 разделяет переменные для каждого представления. Это значит, когда вы находитесь в макете layout.phtml, вы не имеете доступа к переменным, которые присоединены для действия (actions).

Подключение переменных действия (action) в слой (layout)

Контроллер содержит код:

<?php
class IndexController extends ActionController
{
public function
indexAction()
{
return array(
'myvar' => 'test');
}
}
?>

Если вы находитесь в layout.phtml, то получить доступ к переменной можно так:

layout.phtml:

<?php
$children
= $this->viewModel()->getCurrent()->getChildren();
$child = $children[0];
?>

<?php
echo $this->escape($child->myvar);
?>

Если вы действительно хотите убедиться, что собираете корректно дочерние элементы представления, обходите $children и для каждого ребенка смотрите имеет ли он установленное имя captureTo.

layout.phtml:

<?php
$children
= $this->viewModel()->getCurrent()->getChildren();
foreach(
$children as $child) {
if (
$child->captureTo() == 'content') {
break;
}
}
?>

<?php
echo $this->escape($child->myvar);
?>

Подключение переменных слоя в представление

Если вы назначили переменную слоя, то

Module.php:

public function onBootstrap($e)
{
$application = $e->getParam('application');
$viewModel = $application->getMvcEvent()->getViewModel();
$viewModel->some_config_var = '12345';
}

Так вы подключите some_config_var в просмотр.

view/index/index.html:

<?php
echo $this->escape($this->layout()->some_config_var);
?>

Другой, более длинный путь - использование метода getRoot() на помощнике viewModel

view/index/index.html:

<?php
$layoutViewModel
= $this->viewModel()->getRoot();
?>

<?php
echo $this->escape($layoutViewModel->some_config_var);
?>

Сохранение конфигурационных переменных в представление

Отсюда следует, что если вам нужно установить переменную, которая может быть доступна из любого скрипта представления, проще установить ее в поле зрения макета и получить доступ к нему через layout(). Это удобно для представления конфигурационных переменных, которые можно хранить в конфиг. файлах, подобных ключам Google Search API

Application/config/module.config.php:

<?php
return array(
'layout' => array(
'google_search_api_key' => '1234567890',
),
?>

Application/Module.php:

public function onBootstrap($e)
{
$application = $e->getParam('application');
$config = $e->getParam('config');

$viewModel = $application->getMvcEvent()->getViewModel();
$viewModel->config = $config->layout;
}

view/search/index.html:

<?php
echo $this->layout()->config->google_search_api_key;
?>