2008-12-03 43 views
2

嗯,我是PHP的OOP的新手,並試圖用它編寫一個站點。該網站是一個基本的Flash遊戲網站,並有類別來跟蹤遊戲。我的第一步是創建一個基本的MVC設置並列出所有類別。問題是我不知道如何創建一個包含所有類別的數組。我可以將其添加到控制器嗎?我應該在模型中添加一個新方法嗎?讓我知道,代碼如下。如何創建特定對象的數組?

的index.php(控制器)

<?php 
    require_once 'database.php'; 
    require_once 'models/category.php'; 

    if (isset($_GET['page'])) 
    { 
    } 
    else 
    { //display home page 
     require_once 'views/home.php'; 
    } 
?> 

模型/ category.php(模型)

<?php 
    class Category 
    { 
     private $id,$name; 

     function __construct($id) 
     { 
      $category_query = $database_connection->prepare('SELECT id,name FROM categories WHERE id=?'); 
      $category_query->execute(array($id)); 
      $category = $category_query->fetch(); 

      $this->id = $category['id']; 
      $this->name = $category['name']; 
     } 

     function get_id() 
     { 
      return $this->id; 
     } 

     function get_name() 
     { 
      return $this->name; 
     } 
    } 
?> 

視圖/ home.php(視圖)

List of all categories: 
<ul> 
<?php foreach ($all_categories as $category) { ?> 
    <li><?php echo $category->get_name(); ?> (ID: <?php echo $category->get_id(); ?>)</li> 
<?php } ?> 
</ul> 

回答

2

很簡單,你只是錯過了膠水把它放在一起。這通常被描述爲「業務邏輯」。你現在擁有的「模型」實際上就是你的數據存儲層。您的模型需要使用它返回控制器需要給視圖的內容。

在代碼中,您有幾種選擇。一個是控制器要使用數據類來組裝視圖想要使用的數組。如果沒有其他控制器需要這樣做,這是最好的。另一個解決方案是添加一些模型代碼來做到這一點。這使得其他控制器可以調用相同的模型來獲取相同的數據,但是如果您有其他需要相同過程的類,則可以重複代碼。第三種解決方案是擴展數據模型以提供集合視圖。然後,模型代碼成爲控制器所需的集合類型和詢問數據模型之間的簡單轉換層。它甚至可以很簡單地離開控制器。

1

像Staticsan說的,有很多地方你可以把它和關於它的書籍。我會改變構造函數,這樣如果你給它沒有參數,它不會查詢。然後,我會使用一種靜態方法,它自己查詢所有類別(或一些子集),然後組裝一個類別對象的數組以返回...

可能更好的是編寫一個名爲CategoryFactory的類,它只是負責製作和返回這些對象。從那裏(或從靜態方法工廠),你可以確保你只做一個查詢。

MVC並非最終都是Web應用程序架構的全部,Fowler和Alur等人進入了陰暗的細節。