【问题标题】:Yii 2 - how to pass a variable to main view file to the renderer?Yii 2 - 如何将变量传递给主视图文件到渲染器?
【发布时间】:2026-01-16 13:10:01
【问题描述】:

我基本上什么都没试过,因为我在检查的文档中没有找到任何东西。

我基本上想传递一个变量,即。 $balance 所以它将在layouts/main.php 文件的范围内可用:

我在哪里可以这样说:

$balance = MyClass::myMethod();

return $this->render('main', [
    'balance' => $balance,
]);

谢谢。希望大家理解。

【问题讨论】:

    标签: php yii yii2 yii2-advanced-app


    【解决方案1】:
    // layouts/main.php
    var_dump($this->params);
    
    // action method
    $this->view->params['balance'] = $balance;
    

    也看看http://www.yiiframework.com/doc-2.0/guide-structure-views.html#using-blocks

    【讨论】:

      【解决方案2】:

      假设:您使用的是高级模板,并且目录结构类似于

      这个过程从\yii\base\View->beginContent()开始,它返回如下:

      默认情况下 ./frontend/views/layouts/base.php 被称为“viewFile”;依次加载_clear,然后加载main,最后显示$content的内容。

      为了覆盖 $content 的默认值,覆盖 *View->beginContent() 的默认行为是必要的。

      尝试创建一个定义为 ./frontend/controllers/Controller->beginContent($viewFile, $params = []) {/...*/} 的方法,看看是否适用你。

      【讨论】:

        【解决方案3】:

        您可以先将该变量发送到查看文件,例如,

        $balance = MyClass::myMethod();
        
        return $this->render('myview', [
        'balance' => $balance,
        ]);
        

        所以你可以在views/controller_name/myview.php创建一个文件myview.php

        在那里您可以直接访问变量$balance。现在您可以使用myview.php 中的params 将此变量传递给main.php(如果它是您的布局文件)。

        $this->params['balance']  = $balance;
        

        并通过$this->params['balance'] 访问main.php 中的变量。

        【讨论】: