2012-02-06 69 views
3

我習慣於使用Zend Framework來處理局部渲染。在這個渲染中,相應的動作被調用,我從渲染中獲得輸出。在Yii中渲染多個動作(帶有視圖)

現在,有沒有辦法像YII一樣做這樣的事情呢? 我正在向控制器/操作發出請求,這是幾次計算的報告。由於每個報告的計算組合都不相同,因此我爲每次計算都創建了一個控制器。每個控制器都有一個操作,稱爲報告,在這裏進行計算。此報告操作使用數據庫中的數據。有沒有辦法用多個視圖生成頁面? (每計算一個)

回答

3

有一個控制器函數,它調用了不同的函數來獲取各種計算以獲取數據,然後將其解析爲模板,然後將其解析爲部分。

在控制器

public function actionCal() 
{  
    $data = array(); 
    $data['finance'] = $this->financeCal(); 
    $data['holiday'] = $this->holidayCal();        
    $this->render('calculation', array('data'=>$data)); 
} 

鑑於

<?php $this->renderPartial('//cal/_finance_summary', array('financeData'=>$data['finance'])); ?> 
    <?php $this->renderPartial('//cal/_holioday_summary', array('holidayData'=>$data['holiday'])); ?> 
+0

有趣。您的示例代碼中的不同計算是否在同一個控制器中?我可以在多個控制器中使用它們嗎?怎麼樣? – koko 2012-02-06 14:39:52

+0

是的,您可以編寫可供多個控制器使用的可重用函數。例如,一個新的動作也可以調用$ this-> holidayCal();以獲得該控制器所需的信息。 – 2012-02-06 14:47:01

+0

我對我的問題做了一些反思,我認爲計算應該在模型中進行。不在控制器的操作中。 – koko 2012-02-07 08:59:26

1

您在Yii中也有renderPartial,所以這應該不成問題。只需以允許您重用它們的方式構建您的方法(操作)即可。 PS:renderPartial的第三個參數使您可以獲取返回而不是打印的輸出。

+0

我試過用Yii的renderPartial,但看起來我沒有經過這個動作。該應用只會顯示呈現的視圖而不處理該操作。或者我錯了? (請告訴我我錯了,所以我的問題解決了:-p) – koko 2012-02-06 13:49:56

0

我剛添加一個public property $data到我的基Controller類。然後在每個操作中,我使用$this->data將變量發送到視圖。如果我需要從另一個視圖文件中渲染一些視圖文件,我也使用$this->data

0

此外,您可以使用Yii小部件實現此目的。