2012-12-14 52 views
1

我想要使用正確的MVC概念。所以說,在模型中,我們有例如查詢到DB右MVC概念傳遞DB數據來查看

class my_model { 

     public function getUserData() { 
      $res = $this->db->query(" 
       SELECT name, lastname, age, mail FROM users 
      "); 

      return $res; 
     } 

    } 

我做什麼:我通過mysqli_result對象查看和後鑑於while週期我打印從DB數據。

但據我所知,通過mysqli_result查看,是不正確的MVC。

那麼,你能告訴我什麼是正確的MVC解決方案嗎?

+1

如Zend框架。 您可以調用您的Create a controller,調用您的模型對象,然後創建View對象並將返回的Model Object傳遞給View對象。 – Joddy

+0

如果你實際上正在實現一些甚至與MVC遠程相關的東西,那麼你的視圖實例(就像在「由類的對象構成」一樣)將向模型層請求數據(如「沒有任何特定的類,但代表不同的混合類的類型「)。你現在擁有的甚至與MVC沒有什麼相似之處。 –

回答

1

在MVC中,視圖將直接從模型請求數據,並且不會通過任何方式傳遞數據。該視圖依賴於模型並請求自己的數據。看到這個答案:How is MVC supposed to work in CodeIgniter爲更詳細的描述爲什麼這樣。

答案是在模型之後初始化視圖,並在構造函數中傳遞整個模型的視圖。

例如

class View { 
    private $model; 

    public function __construct(my_model $model) { 
     $this->model = $model; 
    } 

    public function output() { 
     $html = '<ul>'; 
     foreach ($this->model->getUserData() as $row) { 
      $html .= '<li>' . $row->name . '</li>'; 
     } 
     $html .= '</ul>'; 
     return $html;  
    } 
} 
0

我認爲你應該實現一個DTO類,它包含用戶的數據。然後你應該用Iterator使用這個DTO類,以便在獲取結果時不要初始化100個DTO類。 一個好的做法是實現一個服務門面,它執行實際的數據庫查詢和迭代器構建,以便您的模型僅調用此存儲庫。

-1

在我的MVC,我會做一些類似的:

class my_model { 
    public function getUserData() { 
    $res = $this->db->query(" 
     SELECT name, lastname, age, mail FROM users 
    "); 

    while ($row = mysql_fetch_assoc($res)) { 
     $results[] = $row; 
    } 
    return $results; 
    } 
} 

class my_controller { 
    function index() { 
    $user_data = $my_model->getUserData(); 
    include("view.php"); 
    } 
} 



    // view.php 
    echo "<ul>"; 
    foreach ($user_data as $d) { 
     echo "<li>" . $d[keyname] . "</li>"; 
    } 
    echo "</ul>";