Yii2如何将模型实例传递给主布局?

Chi*_*may 6 layout yii2 yii2-advanced-app

我有一个更改密码引导模式,当用户单击更改密码导航栏菜单时将触发该模式.

我已将模态包含在页脚中.但是如何ChangePassword model instance将页脚布局文件传递给页脚?

可以beforeRender Or EVENT_BEFORE_RENDER用吗?如果是,怎么样?

正如所建议的那样,我将以下代码放在/ config/bootstrap.php中:

yii\base\Event::on(yii\base\View::className(), yii\base\View::EVENT_BEFORE_RENDER, function() {
    $modelChangePassword = new frontend\models\ChangePassword;
    $this->view->params['modelChangePassword'] = $modelChangePassword;
});
Run Code Online (Sandbox Code Playgroud)

但它给出了Using $this when not in object context错误.

aro*_*hev 8

你可以通过View params传递它:

在渲染视图之前在控制器中添加它:

$this->view->params['model'] = $model;

...

$this->render(...); // this will render your view including main layout
Run Code Online (Sandbox Code Playgroud)

然后在视图中使用:

$model = $this->params['model'];
Run Code Online (Sandbox Code Playgroud)

更新:

如果您想为所有应用程序控制器全局使用它,您可以使用事件:

use Yii;
use yii\base\Event;
use yii\web\View;

...

Event::on(View::className(), View::EVENT_BEFORE_RENDER, function() {
    ...

    Yii::$app->view->params['model'] = $model;
});
Run Code Online (Sandbox Code Playgroud)

将此代码放在应用程序引导程序中或例如在公共父控制器中.

官方文档: