Как передать переменные из контроллера в макет (не вид) в Zend 3 - PullRequest
0 голосов
/ 30 октября 2019

Я использую Zend MVC 3.1.1 и пытаюсь передать переменные из вызываемого действия контроллера в компоновку, но испытываю реальные трудности с поиском способа сделать это. Я не нашел решения в сети для этой проблемы.

Вот метод моего базового контроллера 'render', который вызывается для создания модели представления.

    protected function render ( array $data = array () ) {
        $controller = '';
        $action = '';

        $controller = strtolower( preg_replace( "/^(.*)\\\/", "", $controller ) );

        $data[ 'controller' ] = $controller;
        $data[ 'action' ] = $action;

        $viewModel = new ViewModel( $data );

        $viewModel->setTemplate( $controller . "/{$action}.php" );

        return $viewModel;
    }

А вот фрагмент кодамоего макета.

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title><!-- I WANT TO PUT VARIABLE HERE --></title>
    </head>
    <body>
            <?=$this->content?>
    </body>
</html>

Как я могу передать переменную из действия контроллера 'render' или из любого другого места выполнения и получить доступ к нему так же, как и к '$this-> content '?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 02 ноября 2019

Я решил эту проблему, сохранив экземпляр MvcEvent из события onBootstrap модуля в экземпляре класса LayoutListener, который я создал, чтобы установить соответствующий макет между модулями и использовать его для получения экземпляра модели представления и установки для него переменной.

LayoutListener :: getInstance () -> getEvent () -> getViewModel () -> setVariable ('Keywords', $ Keywords);

Теперь я могу просто сделать "$ this-> Keywords"'в макете и иметь доступ к этой переменной.

0 голосов
/ 30 октября 2019

Попробуйте

....
$viewModel = new ViewModel();

$viewModel->setVariables(
   [
      'controller' => $controller,
      'action' => $action,
   ]
);

$viewModel->setTemplate( $controller . "/{$action}.php" );

return $viewModel;
...

Описание метода setVariables () можно найти внутри vendor / zendframework / zend-view / src / Model / ViewModel.php

...