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
错误。
在渲染视图之前在控制器中添加:
$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 或例如公共父控制器中。
官方文档:
我有一个更改密码 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
错误。
在渲染视图之前在控制器中添加:
$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 或例如公共父控制器中。
官方文档: