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

Yii2 How to pass the model instance to the main layout?

我有一个更改密码 bootstrap 模式,当用户单击“更改密码”导航栏菜单时会触发该模式。

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

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

按照建议,我已将以下代码放入 common/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;
});

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

你可以通过View params:

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

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

...

$this->render(...); // this will render your view including main layout

然后在视图中使用:

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

更新:

如果您希望它全局适用于所有应用程序控制器,您可以使用事件:

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;
});

将此代码放入应用程序 bootstrap 或例如公共父控制器中。

官方文档: