2008-12-03 40 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等人进入了阴暗的细节。