2010-06-11 32 views
2

我有一個遞歸函數被用來在我的網站上生成一個菜單。該函數爲菜單中的每個級別的子級調用數據庫,併爲它們生成html。下一個MVC時,在哪裏放置遞歸函數?

我目前把這個函數放在代碼的模型部分,但是,我覺得在模型中生成html會違背MVC。 我沒有把它放在控制器中,因爲我不想在那裏進行數據庫調用或HTML生成。 我沒有把它放在視圖中,因爲我不想在那裏調用數據庫。

解決此問題的「正確」方法是讓Controller在返回表示菜單的2d數組的模型中調用遞歸函數。然後將數組傳遞給一個視圖,該視圖具有自己的遞歸函數,用於從數組中生成html?

回答

2

正如你所建議的最好的方法可能是讓模型獲取所有的數據。然後以適當的格式將其提供給視圖。然後在視圖中遞歸地生成html。

0

您必須從模型完整菜單數組/嵌套數組中返回。

0

我在my project中創建了一個組件,它從數據庫中檢索菜單數據,格式化包含菜單項的數組並對其進行高速緩存。然後我創建了一個幫手,它接受該數組並創建一個包含可在視圖和佈局中使用的菜單項的HTML列表。

因此,在佈局中我有:echo $databaseMenus->makeMenu($mainMenu);其中makeMenu是幫手的方法,$mainMenu是組件提供的數組。