【问题标题】:How to pass variables from controller to layout (not view) in Zend 3如何在 Zend 3 中将变量从控制器传递到布局(不是视图)
【发布时间】:2020-02-25 04:44:40
【问题描述】:

我正在使用 zend MVC 3.1.1 并尝试将变量从被调用的控制器操作传递到布局,但很难找到这样做的方法。我还没有在网上找到解决这个问题的方法。

这是我的基本控制器“渲染”方法,它被调用以创建视图模型。

    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>

如何从控制器的“渲染”操作或执行中的其他任何地方传递变量,并以与“$this->content”相同的方式访问它?

谢谢。

【问题讨论】:

  • 这对我不起作用。我需要在布局页面中使用变量,而不是模板/视图,我需要从控制器传递它。此方法允许我访问视图中的变量,但不能访问包含它的布局。
  • 是的。我已经尝试了很多次,但我在布局中可以访问的唯一变量是 $this->content。执行 print_r 甚至只将 $this->content 显示为可访问变量。
  • 您需要使用 ViewHelper。看看good book on getting started with ZF3

标签: php zend-framework3 zend-framework-mvc


【解决方案1】:

在 Zend 1.x 中,您可以像这样在控制器中设置变量

$this->view->layout()->isFlag = true;

然后在布局中捕获它

var_dump($this->layout()->isFlag);  // true

【讨论】:

    【解决方案2】:

    试试

    ....
    $viewModel = new ViewModel();
    
    $viewModel->setVariables(
       [
          'controller' => $controller,
          'action' => $action,
       ]
    );
    
    $viewModel->setTemplate( $controller . "/{$action}.php" );
    
    return $viewModel;
    ...
    

    您可以在 vendor/zendframework/zend-view/src/Model/ViewModel.php 中找到 setVariables() 方法描述

    【讨论】:

    • 不起作用。变量只能在模板中访问,但不能在布局中访问。我需要在控制器中设置变量并在布局中访问它,即包含视图/模板的页面/PHP脚本。
    猜你喜欢
    • 1970-01-01
    • 2020-02-17
    • 1970-01-01
    • 2014-05-13
    • 2020-10-28
    • 2011-06-22
    • 2011-09-14
    • 1970-01-01
    相关资源
    最近更新 更多