Yii2 Как передать экземпляр модели в основной макет?

У меня есть модальная загрузка пароля для смены пароля, которая срабатывает, когда пользователь щелкает меню navBar «Изменить пароль».

Я включил модальное окно в нижний колонтитул. Но как я могу передать 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 ошибку.


person Chinmay Waghmare    schedule 02.05.2015    source источник


Ответы (1)


Вы можете передать его через View параметры:

Добавьте это в контроллер перед визуализацией представления:

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

Поместите этот код в начальную загрузку приложения или, например, в общий родительский контроллер.

Официальные документы:

person arogachev    schedule 02.05.2015
comment
Я не хочу делать это в каждом контроллере. Нет ли общего места, куда я могу поместить это, которое будет доступно во всем приложении? - person Chinmay Waghmare; 02.05.2015
comment
Я получаю следующую ошибку, когда помещаю его в файл начальной загрузки: Использование $this, когда не в контексте объекта. Я обновил вопрос. Не могли бы вы взглянуть. - person Chinmay Waghmare; 02.05.2015