2012-08-17 56 views
0

我是MVC的新手,想知道最佳做法是在哪裏放置某段代碼,無論是控制器還是視圖(甚至是模型,如果我走了)。MVC quandaries,這應該進入視圖或控制器?

目前應用程序從數據庫中檢索信息,其中一列是「type」。然後根據類型,有一個switch語句準備要在視圖中顯示的html標記。

喜歡的東西:

foreach ($data as &$dataPoint) 
    { 
     foreach ($dataPoint as &$postItem) 
     { 
      switch ($postItem['type']) 
      { 
       case "image": 
        $postItem['content'] = "<img src=\.$postItem['content']."\" />"; 
        break; 
       case "youtube": 
        $postItem['content'] = "<iframe src=\"http://www.youtube.com/embed/".$postItem['content']."?showinfo=0\" frameborder=\"0\"></iframe>"; 
        break; 
      } 
     } 
    } 

但我只是失去了作爲這個地方應該去,應該是直接在控制器中,然後再將其傳遞給看法?或者它應該放在視圖文件的頂部?

任何有識之士到MVC理論和設計將不勝感激,以及:)

+2

我會把它在視圖中照顧。 – Brian 2012-08-17 16:48:46

回答

2

是的在你看來,像其他人所說。

您確實可以創建一個視圖格式助手文件採取的一些非通用PHP函數

foreach ($data as &$dataPoint) 
    { 
     foreach ($dataPoint as &$postItem) 
     { 
      //format_helper.php 
      get_content_type($postItem); 
     } 
    } 

format_helper.php

if(!function_exists('get_content_type'){ 
    function get_content_type(array $postItem){ 
     switch ($postItem['type']) 
      { 
       case "image": 
        echo "<img src=\.$postItem['content']."\" />"; 
        break; 
       case "youtube": 
        echo "<iframe src=\"http://www.youtube.com/embed/".$postItem['content']."?showinfo=0\" frameborder=\"0\"></iframe>"; 
        break; 
      } 
    } 
}) 
+0

正是我在找的,謝謝。 – bswinnerton 2012-08-17 20:00:24

+0

只是爲了確認,第一個代碼是剪切的還是控制器? – bswinnerton 2012-08-18 01:07:50

+0

在視圖中,$ data是通過控制器提供的 – Philip 2012-08-18 07:45:00

3

如果它的顯示邏輯,它應該在視圖中。因爲這似乎是顯示邏輯,所以視圖看起來是最好的地方。

這個答案解釋有點不同:https://stackoverflow.com/a/2574953/1324019

+0

所以,如果是這樣的話 - 這是否意味着視圖頁面會是這樣的: ... – bswinnerton 2012-08-17 16:54:38

+0

@bswinnerton類似的東西 。本頁面提供了一些如何在codeigniter中使用視圖的好例子:http://codeigniter.com/user_guide/general/views.html – Mansfield 2012-08-17 16:57:56

+0

是的,我已經看過那個頁面,但沒有任何例子包含視圖內的邏輯,這就是爲什麼我問。 – bswinnerton 2012-08-17 17:02:38