通常,最佳做法是僅從控制器調用模型,然後將其傳遞給視圖。這裏有一個例子:yii中的片段緩存:我應該在哪加載我的模型?
public function actionView($id)
{
$this->render('view', array(
'model' => $this->loadModel((int)$id),
));
}
然後你可以使用model
在視圖中顯示的信息。
的問題是,我要實現我的觀點片段緩存:
<?php if($this->beginCache($id, array('duration'=>3600))) { ?>
...content to be cached...
<?php $this->endCache(); } ?>
但由於該模型已經從控制器加載的SQL查詢要被執行。我怎樣才能防止這種情況發生?
我現在發現的唯一選擇是從視圖(在緩存部分)加載模型或執行數據緩存,但我寧願使用片段緩存!
對於你的建議有不同的意見,你不應該從視圖訪問模型。雖然這對於*寫作*來說絕對是正確的,但對模型的讀取權限在視圖中可以完美無缺。所以我不會盲目地遵循MVC的「良好實踐」,如果有充分的理由,不這樣做。例如,在這種情況下,我本人會例外。 –
謝謝!另一種解決方案是在調用模型的控制器中創建一個新方法,並從視圖中調用這個新方法。但最後,就像從視圖中調用模型一樣! – darkheir