正确的方法将数据库调用到视图中

时间:2013-01-02 17:52:45

标签: php model-view-controller pdo

我正在尝试在我网站的database.phtml页面上显示数据库。此页面是一个视图。

到目前为止,我有一个名为DatabaseConect.php的模型

<?php

abstract class DatabaseConect {

protected $db = NULL;

public function __construct (PDO $db) {
    $this->db = $db;
}
}

class Database extends DatabaseConect {

public $props = array ();

private function getPage ($id) {
    $q = $this->db->prepare('SELECT * FROM retrofootball_products');
    $ret = $res->fetchAll();
    return ($this->props=$ret);
}

}

$db = new PDO('mysql:host=helios.csesalford.com;dbname=pd12', 'helloworld', 'password'); //I have changed the log in details 

然后在我看来

<?php require('template/header.phtml') ?>

<?php 
$page = new Database ($db);
?>

<?php require('template/footer.phtml') ?>

我一直在尝试在Stackoverflow上找到这些东西,并且遇到过这些文章,但是由于我不熟悉这些文章,所以它们不在我的头上:

Properly calling the database from Model in an MVC application? http://programmers.stackexchange.com/questions/178831/using-pdo-with-mvc

我的问题是使用MVC连接数据库然后在视图中显示的最佳方法是什么?我是否需要在模型中使用PDO::FETCH将结果显示到变量中,然后在视图中调用此变量?

编辑:就像建议我在控制器中使用了引导程序。我是否需要在我的视图中创建一个新的实例才能使其工作?我在哪里运行查询在正确的位置?

<?php

class Dependency_Manager {

private $db;

public function __construct($settings) {
    $this->db = new PDO('mysql:host=helios.csesalford.com;dbname=helloworld', 'password',   'php54');
}

public function getDB() {
    return $db;
    }
}

class CMS {
public function __construct(PDO $db) {
    //$stmt = $db->query('SELECT * FROM retrofootball_products');
    }
}

$settings = array();

$dm = new Dependency_Manager($settings);
$cms = new CMS($dm->getDB());    

1 个答案:

答案 0 :(得分:1)

  

FYI:视图不是模板。在正确实现的MVC中,视图是负责所有UI逻辑的实例(如在 - 由类创建的对象中)。为实现这一目标,他们经常处理多个模板。

关于数据库连接(以及与任何其他存储形式的交互)的令人困惑的部分是仅在非常低级别的结构中需要它 - data mappers {{3 }}

连接本身应该通过工厂提供给每个数据映射器(需要它,因为并非所有映射器都可以与SQL数据库一起使用)实例。代码示例book chapter - 相关部分是StructureFactory类定义。

创建数据映射器的工厂将注入一个需要使用映射器的实例。否则将违反here

该视图不应该对数据的来源有所了解。它只会从模型层请求一些信息。

  

P.S。: LoD古老的答案已经过时了。它包含了我在18个月前对MVC的理解。我很快就会得到更新。您会发现this更新。