2010-01-13 54 views
2

我有一個「博客預覽」的模板 - 基本上只是一個縮略圖,標題和所述博客的簡短摘錄,其結構非常簡潔,可以在列表中重複使用。PHP MVC視圖循環

正如上面所暗示的那樣,我打算從我的模型中的數據庫中將我網站上的前10位博客轉移到控制器,並將其作爲視圖提供給他們。在視圖中,我需要循環瀏覽結果併爲每個博客填充新的「博客預覽」。

我目前的解決方案(我認爲這可能會破壞MVC的規則)是這樣做的視圖模板:

foreach($this->blogs as $blog) { 
    $tpl = new Output_Html(); 
    $tpl->title = $blog['title']; 
    // ...assign other vars 

    $tpl->render(); 
} 

不知怎的,這感覺像什麼的觀點不應該被允許嗎?但是,我還能如何循環訪問主頁面模板內的「預覽」模板?

幫助?

回答

2

考慮到視圖負責生成輸出,你在這裏做的事情看起來沒問題:你在視圖中沒有做任何「計算/商業事情/類似的事情」。

我唯一的問題是,你在這裏寫了很多代碼;我寧願將$blog數組/對象傳遞給查看整個視圖,然後讓視圖處理它 - 而不是將$blog的每個屬性分配給視圖。


即這樣的事情似乎(只是一個想法 - 你來看看如何可以用您的視圖類適合)更漂亮:

foreach($this->blogs as $blog) { 
    $tpl = new Output_Html(); 
    $tpl->blog = $blog; 
    $tpl->render(); 
} 

這意味着,如果你的blog對象不斷變化,你只有一個視圖來編輯(添加或刪除東西),你不必修改每個調用該視圖來添加/刪除$blog的一個組件/屬性。

+0

幹得好,我喜歡那樣。實際上 - 我是這麼做的,但是我忽略了說明被傳遞的對象,因爲我不確定這是否是猶太教。謝謝你救了我另一個問題! – johnnietheblack 2010-01-13 23:24:58

+0

不客氣:-)玩得開心! – 2010-01-13 23:28:02

1

控制器的責任是處理輸入並將模型設置爲特定狀態。您的視圖的責任是渲染模型。所以,我會說,這是可以做的。這就像渲染部分視圖或使用ViewHelper。 View Helper封裝動態業務數據的表示邏輯。

0

我同意帕斯卡。不要在你的控制器上執行該操作,只需將它傳遞給視圖,然後在其中執行其餘的操作。讓控制器接受輸入,通過模型對其進行預處理,然後爲視圖準備一切。這樣,您仍然可以確保代碼的可維護性。