2015-05-02 65 views
3

我有一個更改密碼引導模式,當用戶單擊更改密碼navBar菜單時,它將被觸發。Yii2如何將模型實例傳遞給主佈局?

我在頁腳中加入了模態。但我怎樣才能將ChangePassword model instance傳遞給頁腳佈局文件?

可以使用beforeRender Or EVENT_BEFORE_RENDER嗎?如果是,如何?

至於建議,我已經把下面的代碼中常見的/配置/ 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錯誤。

回答

5

您可以通過Viewparams傳遞:

在控制器添加此渲染視圖之前:

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

將這個代碼在應用引導或例如在共同父控制器。

官方文檔:

+0

我不想這樣做,在每個控制器。是不是有一個可以放在整個應用程序中的地方? – Chinmay

+0

當我將它放在引導文件中時,出現以下錯誤:在不在對象上下文中時使用$ this。我有更新的問題你可以請看看。 – Chinmay

+0

根據你的評論更正。 – arogachev

相關問題